下载此文档

16-Set集合.doc


文档分类:IT计算机 | 页数:约26页 举报非法文档有奖
1/26
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/26 下载此文档
文档列表 文档介绍
。它和List接口相同,都是Collection的子接口。区别:List:有脚本、可以重复、拥有特有的ListIterator迭代器Set:没有脚本、不能包含重复元素,没有特有的迭代器,只能使用Iterator进行遍历。,所有方法全部来自于Collection接口。重点学****Set接口下的两个实现类:HashSet:TreeSet:此类实现Set接口,由哈希表(实际上是一个HashMap实例)支持。它不保证set的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。HashSet集合的底层使用的哈希表结构。,这时在计算机中称为哈希冲突。如果哈希值相同了,这时必须调用对象的equals方法比较2个对象(多个对象)是否是同一个对象。任何给哈希表中存储的对象都应该具备hashCode和equals方法。/**演示HashSet集合*/lassHashSetDemo{publicstaticvoidmain(String[]args){//创建集合对象HashSetset=newHashSet();//("bbb");("");("");("abc");("abc");//遍历HashSet集合for(Iteratorit=();();){(());}}}/**演示给HashSet中保存自定义类的对象*/lassHashSetDemo2{publicstaticvoidmain(String[]args){//创建集合对象HashSetset=newHashSet();//创建自定义对象//Personp=newPerson("华安",23);//(p);(newPerson("华安",23));(newPerson("华安",23));(newPerson("秋香",18));(newPerson("9527",23));(newPerson("小书童",33));//遍历for(Iteratorit=();();){(());}}}分析:我们自己定义了一个Person类,然后创建Person对象,将这些Person对象存储到HashSet集合中。希望同姓名和年龄的Person对象,应该是同一个人,在集合中只能有一个。但是通过程序发现依然可以保存多个同姓名和年龄的Person对象。HashSet集合底层使用的哈希表,给哈希表中存储对象的时候,需要调用当前对象自己的hashCode计算位置,equals判断对象是否相同。而我们的Person类继承了Object类,自然就会具备hashCode和equals方法。但是Person类中并没有去复写hashCode和equals方法,说明在将Person对象给HashSet集合中保存的时候,调用的hashCode和equals方法依然使用的Object类中的方法。Object类中的equals方法是在比较2个对象的地址值是否相同。hashCode方法计算哈希值的是也是根据对象的地址值在进行计算。如果创建了多个Person对象,它们的姓名和年龄相同,我们认为应该是同一个人,但是由于是new了多次,在堆中就会有多个Person对象,它们的地址值肯定是不相同的。。使用hashCode计算位置,使用equals比较2个对象是否相同。,自定义对象所属的类需要复写Object类中的hashCode和equals方法。,保证对象唯一。LinkedHashSet它是HashSet集合的子类,它也属于Set接口下的集合容器,同样也能保证对象的唯一。和HashSet的区别是:LinkedHashSet可以保证存放的元素的存取顺序一致。LinkedHashSet它没有自己的特有方法,所有方法全部来自于父类。/**演示LinkedHas

16-Set集合 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数26
  • 收藏数0 收藏
  • 顶次数0
  • 上传人文库旗舰店
  • 文件大小250 KB
  • 时间2019-09-24