2015-08-10~11 集合
Coection
数组、集合有何不同?
数组也可存储对象,但长度固定;集合长度可变。
数组可存储任意数据类型,集合只存储对象(可不同类型)。
集合框架的构成及分类

白色箭头虚线:子接口关系
istIterator和Iterator是接口继承关系,istIterator是Iterator的子接口。
ist、Set是Coection的子接口。
黑色箭头虚线:生成关系
Coection中有个方法能产生一个Iterator对象。
黑色实线框:常用
白色箭头实线
Array、inked……是ist的子类。
Utiities:工具

两大接口
Java集合类主要由两个接口派生出来:
Coection
Set: 不能存放重复对象
ist: 可存放重复对象,有序
Queue: 队列
SortedSet: 可对集合数据排序
Map
SortedMap: 可对集合数据排序
在集合里的存储永远存的是一个引用地址。
Coection接口
Set接口
Set是Coection子接口;
Set无法记住添加的顺序,不允许包含重复的元素。
Set判断两个对象是否相等用equas,而不是使用==。
常用子类:
HashSet:散列存放
TreeSet:有序存放
hashCode方法对于HashSet的作用
HashSet类是Set接口最常用的实现类,采用hash算法存储数据,具有良好的存储和查找功能。
- 散列存储:不记录添加顺序;排列顺序时,顺序有可能发生变化;
- 线程不安全的,多个线程访问一个HashSet要使用同步代码;
- HashSet集合元素值允许是nu,但是最多只能有一个;
hash(翻译为哈希,或散列)算法的功能:
- 保证通过一个对象快速找到另一个对象;
- 其算法价值体现在速度,可以保证查询快速执行;
- 当从HashSet中访问元素时,HashSet先计算该元素的hashCode(也就是该对象的hashCode方法返回值),然后直接到该HashCode对应的位置取出该元素;
- 在这里对象的hashCode就好比是数组里的索引,但是不是索引;
HashSet元素添加
当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,判断已经存储在集合中的对象的hashCode值是否与添加的对象的hashCode值一致:若不一致:直接添加进去;若一致,再进行equas方法比较,equas方法如果返回true,表明对象已经添加进去了,就不会再添加新的对象了,否则添加进去;
如果我们重写了equas方法,也要重写hashCode方法,反之亦然;。
HashSet集合判断两个元素相等的标准是两个对象通过equas方法比较相等,并且两个对象的hashCode方法返回值也相等。
如果需要某个类的对象保存到HashSet集合中,覆写该类的equas()和hashCode()方法,应该尽量保证两个对象通过equas比较返回true时,他们的hashCode返回也相等。
不同类型字段如何取得hashCode

TreeSet

浙公网安备 33010602011771号