JavaSE_15_集合类(二)_第1页
JavaSE_15_集合类(二)_第2页
JavaSE_15_集合类(二)_第3页
JavaSE_15_集合类(二)_第4页
JavaSE_15_集合类(二)_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Set接口没有提供Collection接口额外的方法,但实现Set接口的集合类中的元素是不可重复的。Set集合与数学中集合的概念相对应。JDK API中所提供的Set集合类常用的有:HashSet:散列存放TreeSet:有序存放LinkedHashSet1 实现Set接口的集合HashSet存对象时: 根据每个对象的哈希码值(调用hashCode()获得)用固定的算法算出它的存储索引,把对象存放在一个叫散列表的相应位置(表元)中: 如果对应的位置没有其它元素,就只需要直接存入。 如果该位置有元素了,会将新对象跟该位置的所有对象进行比较(调用equals(),以查看是否已经存在了:还不存在就存

2、放,已经存在就放弃加入。 取对象时: 根据对象的哈希码值计算出它的存储索引,在散列表的相应位置(表元)上的元素间进行少量的比较操作就可以找出它。 Set接口存、取、删对象都有很高的效率。2HashSet不保存元素的加入顺序。HashSet根据元素的哈希码进行存放,取出时也可以根据哈希码快速找到。使用示例3 向HashSet中添加元素时,系统为保证不重复,先比较hashCode( ) ,如果相同,再比较equals(),如果还相同,则认为是同一个对象,不再加入,add(.)返回false,Demo 要存入HashSet集合的自定义类型的对象通常需要重写hashCode()和equals()方法。

3、 同一个对象的hash值一定相同,同一个hash值不一定是同一个对象,甚至可能是不同类的对象。Demo HashSet set1加入字符串 set2加入Integer set3加入Student对象,属性有name,age练习 创建GirlFriend对象,name,age,sex,birthday存入HashSet集合中 如果对象所有的属性值都一致,就认为是同一对象,不重复存储,否则就存储,然后两种方式遍历set集合。 重写hashCode(),equals(),toString()练习 HashSet中存放Person(重写hashCode,equals,toString) 属性有name

4、,age,sex,height,weight hashCode()计算:name,age,sex equals()计算:name,age,sex,heightTreeSet使用红黑树结构对加入的元素进行排序存放,输出时也会按排序后的顺序, 所以放入TreeSet中元素必须是”可排序的”。13,8,17,1,11,15,25,6,22,278什么是 可排序的 加入TreeSet集合中的javabean类本身要实现Comparable kmprbl接口 自定义一个实现Comparatorkmp,ret接口的比较器实现类,在创建TreeSet对象时,将自定义比较器传入构造方法 如果加入的类”不可比较

5、”,则add()方法在运行时会报错所有可排序的类都必须实现java.lang.Comparable接口,实现该接口中的唯一方法:public int compareTo(Object obj); 该方法如果 this:新加入对象,obj:集合中已经存在的对象. 返回 0,表示 this = obj,不加入集合 返回正数,表示 this obj,this较大放后面 返回负数,表示 this obj,this较小放前面可排序的类通过Comparable接口的compareTo方法来确定该类对象的排序方式。10使用Comparable接口定义排序顺序有局限性:实现此接口的类只能按compareTo(

6、T t)定义的这一种方式排序。如果同一类对象要有多种排序方式,应该为该类定义不同的比较器(实现Comparator接口的类)。Comparator接口中的比较方法:public int compare(T a, T b);该方法如果 返回 0,表示 a= b 返回正数,表示 a b 返回负数,表示 a bTreeSet有一个构造方法允许给定比较器,它就会根据给定的比较器对元素进行排序。11java.util.ComparatorDemo TreeSet 加入字符串 加入Integer 加入MyBean类的对象(里面有int a,b,c三个属性,先按照a顺序排,a相同再按照b顺序排,b又相同则按

7、照c排序) 加入Person(实现Comparable接口,重写compareTo,toString) TreeSet set = new TreeSet(new PersonComparator(); 加入Person子类类型Student,自定义比较器实现Comparator接口TreeSet练习 练习1.人类,属性:姓名,收入,年龄,(单独一本)书, 书类, 属性: 书名,价格 用Comparable接口实现 存储TreeSet集合,排序规则: A:先按照收入排序:从高到低 B:收入相等的情况下,按照年龄排序:从小到大 C:如果收入和年龄都相等,按照姓名排序,字典顺序(String类的c

8、ompareTo方法) D:如果以上3个属性都相等,按照书排序,先按照书价格:从低到高,如果书价格相等,按照书名(字典顺序)。 练习2.利用自定义比较器Comparator实现类完成上题。 练习3.使用匿名内部类自定义比较器完成上题。java.util.Collections类是操作集合的工具类,提供了一些静态方法实现了基于集合的一些常用算法void sort(List list)根据元素的自然顺序 对指定List列表按升序进行排序。List列表中的所有元素都必须实现 Comparable 接口,否则编译报错。void shuffle(List list)对List列表内的元素进行随机排列vo

9、id reverse(List list)对List列表内的元素进行反转void copy(List dest, List src)将src列表内的元素复制到dest列表中,要求dest列表的现有长度大于等于src列表的现有长度,否则运行时会出现IndexOutOfBoundsExceptionjava提供的copy方法 Collections: static void copy(List dest, List src)将src列表内的元素复制到dest列表中 Arrays: static int copyOf(int original, int newLength) 复制指定的数组,截取或用

10、 0 填充(如有必要),以使副本具有指定的长度。 System: static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。集合与数组的相互转换 Arrays类的方法 数组集合 static List asList(T. a) 返回一个受指定数组支持的固定大小的列表,例如: Integer arr = 1,2,3;/必须是引用数据类型 List list = Arrays.asList(arr); String

11、 arr2 = new String 1, 2; List list = Arrays.asList(arr2); Collection接口的方法 集合数组 Object toArray() 返回包含此 collection 中所有元素的Object数组。 T toArray(T a) 返回包含此 collection 中所有元素的数组;返回数组的运行时类型与指定数组的运行时类型相同。List list = new ArrayList();list.add(1);list.add(2);int size = list.size();/获取集合的大小String arr = (String)list.toArray(new Stringsize);集合与数组的相互转换LinedHashSet根据元素的哈希码进行存放,同时用链表记录元素的加入顺序。18Demo LinkedHashSet 对比HashSet和LinkedHashSet的Itera

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论