1 / 15
文档名称:

16-Set集合解读.docx

格式:docx   大小:238KB   页数:15页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

16-Set集合解读.docx

上传人:今晚不太方便 2017/5/12 文件大小:238 KB

下载得到文件列表

16-Set集合解读.docx

文档介绍

文档介绍:Set 集合 1. Set 接口 . Set 接口介绍 Set 接口是 Collection 接口下的一个子接口。它和 List 接口相同, 都是 Collection 的子接口。区别: List :有脚本、可以重复、拥有特有的 ListIterator 迭代器 Set :没有脚本、不能包含重复元素, 没有特有的迭代器,只能使用 Iterator 进行遍历。 2. HashSet 集合 Set 接口没有自己的特有的方法,所有方法全部来自于 Collection 接口。重点学****Set 接口下的两个实现类: HashSet : TreeSet : 此类实现 Set 接口, 由哈希表( 实际上是一个 HashMap 实例) 支持。它不保证 set 的迭代顺序; 特别是它不保证该顺序恒久不变。此类允许使用 null 元素。 HashSet 集合的底层使用的哈希表结构。 . 哈希表介绍如果多个对象它们计算出的哈希值相同, 这时在计算机中称为哈希冲突。如果哈希值相同了, 这时必须调用对象的 equals 方法比较 2个对象( 多个对象)是否是同一个对象。任何给哈希表中存储的对象都应该具备 hashCode 和 equals 方法。/* *演示 HashSet 集合*/ public class HashSetDemo { public static void main(String[] args ){ // 创建集合对象 HashSet set = new HashSet(); // 添加元素 set .add( "bbb" ); set .add( "" ); set .add( "" ); set .add( "abc" ); set .add( "abc" ); // 遍历 HashSet 集合 for ( Iterator it = set .iterator() ; it .hasNext(); ){ System. out .println( it .next()); }}} . HashSet 保存自定义对象/* *演示给 HashSet 中保存自定义类的对象*/ public class HashSetDemo2 { public static void main(String[] args) { // 创建集合对象 HashSet set = new HashSet(); // 创建自定义对象//Person p= new Person(" 华安",23); //(p); ( new Person( "华安" ,23)); ( new Person( "华安" ,23)); ( new Person( "秋香" ,18)); ( new Person( "9527" ,23)); ( new Person( "小书童" ,33)); // 遍历 for ( Iterator it = () ; (); ){ ( () ); }}} 分析: 我们自己定义了一个 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 对象,它们的地址值肯定是不相同的。 . HashSet 保证对象唯一的原因 HashSet 保证对象的唯一依赖当前给 HashSet 集合中保存的对象的 hashCode 和 equals 方法。使用 hashCode 计算位置,使用 equ