下载此文档

16-set集合.docx


文档分类:IT计算机 | 页数:约15页 举报非法文档有奖
1/15
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/15 下载此文档
文档列表 文档介绍
Set集合
Set接口
Set接口介绍
Set接口是Collection接口下的一个子接口。它和List接口相同,都是Collection的子接口。
区别:
List:有脚本、可以重复、拥有特有的ListIterator迭代器
Set:没有脚本、不能包含重复元素,没有特有的迭代器,只能使用Iterator进行遍历。
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();

//添加元素
("bbb");
("");
("");
("abc");
("abc");
//遍历HashSet集合
for( Iterator it = () ; (); ){
(());
}
}
}
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计算位置,使用equals比较2个对象是否相同。
HashSet总结
要保证给HashSet集合中存储的自定

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

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数15
  • 收藏数0 收藏
  • 顶次数0
  • 上传人w447750
  • 文件大小238 KB
  • 时间2017-09-07