1、第8讲 对象的管理(下),面 向 对 象 程 序 设 计,北京科技大学天津学院 信息工程系,2,回顾,对象数组Arrays类的使用sort排序实现Comparable接口,北京科技大学天津学院 信息工程系,3,对象数组问题,对象数组的元素个素是固定的,不适用于增加和删除操作。增加元素的数量是未知的;删除元素后,移动元素位置效率很低。当对象数组内尚有元素为null时,使用Arrays类对其进行sort排序,会报空指针异常。根本原因为对象数组的元素个数不可变。,北京科技大学天津学院 信息工程系,4,本节主要内容,java.util包List集合:ArrayList、LinkedList、Vecto
2、rSet集合:HashSet、TreeSetMap集合:HashMap、TreeMapJava新特性泛型,北京科技大学天津学院 信息工程系,5,两个集合框架,Collection集合框架Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素。Map集合框架Map提供key到value的映射。 Map中的元素是键值成对的对象。一个Map中不能包含相同的key,每个key只能映射一个value。,北京科技大学天津学院 信息工程系,6,集合框架,北京科技大学天津学院 信息工程系,7,List集合,List是有序的Collection;使用索
3、引(类似于数组下标)来访问List中的元素;List允许有相同的元素。实现List接口的常用类有LinkedList、ArrayList、Vector和Stack。 List接口常用方法有:list.add( ):添加数据。list.remove( ):删除数据。list.removeAll( ):删除所有数据。list.retainAll( ):保留交集。list.subList(size1, size2):返回size1到size2之间的数据。,北京科技大学天津学院 信息工程系,8,ArrayList,ArrayList 对象是长度可变的对象引用数组,类似于动态数组。随着元素的添加,元素的
4、数目会增加,列表也会随着扩展。访问和遍历对象时,它提供更好的性能。常用方法有:boolean add(Object obj):将指定的元素追加到列表的尾部。Object get(int index):返回列表中指定位置的元素。int size( ):返回列表中的元素数。 int indexOf(Object obj):搜索给定对象第一次出现的位置。int lastIndexOf(Object obj):返回指定对象在列表中最后一次出现的位置。boolean remove(int index):移除列表中指定位置上的元素。,北京科技大学天津学院 信息工程系,9,LinkedList,Linked
5、List提供额外的addLast、addFirst、removeFirst、removeLast等方法。这些操作使LinkedList可被用作堆栈(stack)、队列(queue)或双向队列(deque)。,new Student(“003”);,new Student(“002”);,new Student(“001”);,001,002,003,进栈,出栈,入队,出队,北京科技大学天津学院 信息工程系,10,Iterator迭代器,所有Collection类型的实现类都支持一个iterator( )的方法,该方法返回一个迭代器,使用该迭代器即可逐一遍历访问Collection中每一个元素。
6、用法如下:Iterator it = collection.iterator( ); /获得一个迭代器while(it.hasNext( ) Object obj = it.next( ); /得到下一个元素,北京科技大学天津学院 信息工程系,11,Set集合,Set是一种不包含重复的元素的Collection,即任意的两个元素e1和e2都有e1.equals(e2) = false,Set最多有一个null元素。Set接口不保证维护元素的顺序。实现Set接口的常用类有HashSet和TreeSet。,北京科技大学天津学院 信息工程系,12,HashSet,HashSet集合里面存放的对象是没
7、有特定次序的。元素不能重复,例如: Set set=new HashSet( ); String s1=new String(hello); String s2=new String(hello); set.add(s1); set.add(s2);虽然变量s1和s2实际上引用的是两个内存地址不同的字符串对象,但是由于s2.equals(s1)的比较结果为true,因此Set认为它们是相等的对象,当第二次调用add方法时,add方法不会把s2引用的字符串对象加入到集合中。,北京科技大学天津学院 信息工程系,13,TreeSet,TreeSet是保持特定次序的Set,具有排序功能。 Set se
8、t = new TreeSet ( );set.add(justin);set.add(car);set.add(minor);set.add(justin);Iterator iterator = set.iterator( );while(iterator.hasNext( ) System.out.print(iterator.next( ) + ); 程序运行结果:car justin minor由于集合中是String类型元素,输出结果依据Unicode编码自动排序。,北京科技大学天津学院 信息工程系,14,Map集合,Map提供key到value的映射,每个key映射一个value
9、 。一个Map中不能包含相同的key,但对应的value对象可以重复。Map中的元素是键值成对的对象,像个小型数据库,最典型的应用就是数据字典。 Map有两种比较常用的实现:HashMap和TreeMap。,北京科技大学天津学院 信息工程系,15,HashMap,在各种Map中,HashMap用于快速查找。集合中的每一个元素对象包含一对键和值,集合中没有重复的键,但值对象可以重复。例如如下程序语句: Map map=new HashMap( ); map.put(1, Mon); map.put(1, Monday); map.put(2, Monday);由于第一次和第二次加入到Map中的键
10、都是1,所以第一次加入的值将被覆盖,而第二个和第三个的值虽然相同,但是键不一样,所以分配不同的地址空间,不会发生覆盖,也就是说一共有两个元素在map这个Map类型集合中。 因为Map的键不可能重复,所以可以用Set数据结构来存储;而Map的值有可能重复,所以要用Collection来存储。,北京科技大学天津学院 信息工程系,16,TreeMap,TreeMap和TreeSet一样,能对键进行自动排序。 Map map = new TreeMap( );map.put(1, Monday);map.put(3, Wendsday);map.put(4, Thursday);map.put(2,
11、Tuesday);Set keys = map.keySet( );Iterator it = keys.iterator( );while(it.hasNext( ) String key = (String)it.next( );String value = (String)map.get(key);System.out.println(key + + value);,程序运行结果: 1 Monday 2 Wendsday 3 Thursday 4 Tuesday,北京科技大学天津学院 信息工程系,17,泛型,泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数
12、据类型被指定为一个参数。 在Java SE 1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。,Collections类,Collections是针对集合类的一个帮助类。提供了一系列静态方法实现对各种集合的搜索、排序、线程完全化等操作,相当于Arrays类类似的操作,用法如下
13、:Collections.max(Collection coll); /取coll中最大的元素Collections.sort(List list); /对list中元素排序,北京科技大学天津学院-信息工程系,北京科技大学天津学院 信息工程系,19,集合框架总结,List允许有相同的元素,允许有null元素,元素是有序的,使用索引访问元素。Set是不包含重复的元素,最多有一个null元素,不保证维护元素的顺序,使用Iterator迭代访问元素。Map提供key到value的映射,每个key映射一个value ,不允许有null元素。一个Map中不能包含相同的key,但对应的value对象可以重复,不保证维护元素的顺序,根据key访问value。,
Copyright © 2018-2021 Wenke99.com All rights reserved
工信部备案号:浙ICP备20026746号-2
公安局备案号:浙公网安备33038302330469号
本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。