论坛
门户
内部优惠
喜欢
话题
VIP会员
搜索
新浪微博
登录
注册
100%
100%
首页
>
软件开发
>
java语言
>
Java_集合框架之Set接口
回复
« 返回列表
zhoujufu
精灵王
注册日期
2011-07-25
发帖数
275
QQ
火币
390枚
粉丝
10
关注
4
加关注
写私信
打招呼
阅读:
3989
回复:
0
Java_集合框架之Set接口
楼主
#
更多
只看楼主
倒序阅读
发布于:2013-08-23 11:44
保存
100%
100%
[]
1
--<
java
.
util >--
Set接口
:
Set接口中的方法和Collection中方法一致的。Set接口取出方式只有一种,
迭代器
。
|--HashSet:
底层数据结构是哈希表,线程
是不同步的
。
无序,高效;
HashSet集合保证元素唯一性
:通过元素的hashCode方法,和equals方法完成的。
当元素的hashCode值相同时,才继续判断元素的equals是否为true。
如果为true,那么视为相同元素,不存。如果为false,那么存储。
如果hashCode值不同,那么不判断equals,从而提高对象比较的速度。
|--LinkedHashSet:
有序,hashset的子类。
|--TreeSet:
对Set集合中的元素的进行指定顺序的排序。
不同步
。TreeSet底层的数据结构就是二叉树。
哈希表的原理:
1,对对象元素中的关键字(对象中的特有数据),进行哈希算法的运算,并得出一个具体的算法值,这个值 称为
哈希值
。
2,哈希值就是这个元素的位置。
3,如果哈希值出现冲突,再次判断这个关键字对应的对象是否相同。如果对象相同,就不存储,因为元素重复。如果对象不同,就存储,在原来对象的哈希值基础 +1顺延。
4,存储哈希值的结构,我们称为哈希表。
5,既然哈希表是根据哈希值存储的,为了提高效率,最好保证对象的关键字是唯一的。
这样可以尽量少的判断关键字对应的对象是否相同,提高了哈希表的操作效率。
对于ArrayList集合,判断元素是否存在,或者删元素底层依据都是equals方法。
对于HashSet集合,判断元素是否存在,或者删除元素,底层依据的是hashCode方法和equals方法。
TreeSet:
用于对Set集合进行元素的指定顺序排序,排序需要依据元素自身具备的比较性。
如果元素不具备比较性,在运行时会发生ClassCastException异常。
所以需要元素
实现Comparable接口
,强制让元素具备比较性,
复写compareTo方法
。
依据compareTo方法的返回值,确定元素在TreeSet数据结构中的位置。
TreeSet方法保证元素唯一性的方式:
就是参考比较方法的结果是否为0,如果return 0,视为两个对象重复,不存。
注意:
在进行比较时,如果判断元素不唯一,比如,同姓名,同年龄,才视为同一个人。
在判断时,需要分主要条件和次要条件,当主要条件相同时,再判断次要条件,按照次要条件排序。
TreeSet集合排序有两种方式,Comparable和Comparator区别:
1:让元素自身具备比较性,需要元素对象实现Comparable接口,覆盖compareTo方法。
2:让集合自身具备比较性,需要定义一个实现了Comparator接口的比较器,并覆盖compare方法,并将该类对象作为实际参数传递给TreeSet集合的构造函数。
第二种方式较为灵活。
喜欢
0
评分
0
最新喜欢:
SO 我拿流年 乱了浮生 SO
回复
100%
发帖
回复
« 返回列表
普通帖
您需要登录后才可以回帖,
登录
或者
注册
100%
返回顶部
关闭
最新喜欢