集合-Set
2016-03-20 21:45
609 查看
Set用于存储无序(存入和读取的顺序不一定个相同)的元素,而且不重复存储元素。
在该set中我们常常用到的是HashSet、TreeSet、LinkedHashSet。
哈希表变存放的是哈希值,HashSet存储元素的顺序并不是按照存入时的顺序,而是按照哈希值来存的,取数据的时候也是按照哈希值来取。HashSet判断存入重复元素的规则,使用的是hashcode和equals来判断的。
在对象加入HashSet之前,HashSet会调用对象的hashCode方法来判断对象加入的位置,同时也会与其他已经加入的对象的hashCode进行比较,如果没有相等的hashCode,HashSet就会认为对象没有重复出现。如果哈希值相同,接着会焦勇equals方法,如果equals返回为true,那么HashSet会认为对象重复出现了,加入失败,如果返回false,HashSet认为新加入的对象没有重复,新元素可以存入。
流程图
TreeSet是采用的红-黑树的数据结构,默认对元素进行自然排序。如果在比较的时候两个对象返回值为0,那么元素重复。
当然,我们也可以给TreeSet指定排序规则
指定排序规范的方式
一、元素自身具备比较行
元素自身具备比较性,需要元素实现Comparable接口,重写compareTo方法,也就是让元素自身具备比较性,这种方式叫做元素的自然排序也叫做默认排序
二、容器具备比较性
当元素自身不具备比较性,或者自身具备的比较性不是所需要的,那么此时可以让容器自身具备。定义一个类实现接口Comparator,重写compare方法,并将该接口的子类实例对象作为参数传递给TreeSet集合的构造方法。
注:当Comparable比较方式和Comparator比较方式同时存在时,以Comparator的比较方式为主。
LinkedHashSet
如果需要保存存储数据,并且需要过滤重复元素,可以使用LinkedHashSet。
相关用法,可参考API文档。
在该set中我们常常用到的是HashSet、TreeSet、LinkedHashSet。
HashSet
HashSet是线程不安全的,存取速度快,底层是一哈希表实现的。哈希表变存放的是哈希值,HashSet存储元素的顺序并不是按照存入时的顺序,而是按照哈希值来存的,取数据的时候也是按照哈希值来取。HashSet判断存入重复元素的规则,使用的是hashcode和equals来判断的。
在对象加入HashSet之前,HashSet会调用对象的hashCode方法来判断对象加入的位置,同时也会与其他已经加入的对象的hashCode进行比较,如果没有相等的hashCode,HashSet就会认为对象没有重复出现。如果哈希值相同,接着会焦勇equals方法,如果equals返回为true,那么HashSet会认为对象重复出现了,加入失败,如果返回false,HashSet认为新加入的对象没有重复,新元素可以存入。
流程图
TreeSet
如果数据要求不能重复存储元素,而且要排序,那么此时可以使用TreeSetTreeSet是采用的红-黑树的数据结构,默认对元素进行自然排序。如果在比较的时候两个对象返回值为0,那么元素重复。
当然,我们也可以给TreeSet指定排序规则
指定排序规范的方式
一、元素自身具备比较行
元素自身具备比较性,需要元素实现Comparable接口,重写compareTo方法,也就是让元素自身具备比较性,这种方式叫做元素的自然排序也叫做默认排序
二、容器具备比较性
当元素自身不具备比较性,或者自身具备的比较性不是所需要的,那么此时可以让容器自身具备。定义一个类实现接口Comparator,重写compare方法,并将该接口的子类实例对象作为参数传递给TreeSet集合的构造方法。
注:当Comparable比较方式和Comparator比较方式同时存在时,以Comparator的比较方式为主。
LinkedHashSet
如果需要保存存储数据,并且需要过滤重复元素,可以使用LinkedHashSet。
相关用法,可参考API文档。
相关文章推荐
- 读书笔记| (三)ARM9 嵌入式学习:ARM实验篇
- hdu1402A * B Problem Plus
- 英文歌曲:Yesterday Once More(昨日重现)
- 【机房个人重构】数据库设计之物理设计
- 汇编学习3
- SNAT
- webView的使用
- 欢迎使用CSDN-markdown编辑器
- Java - 多线程
- print(),print_r(),echo()的区别
- DOM对象编程练习小结
- Android系统组件BroadcastReceiver
- u插件开发,图解每个js之前的通信
- 整数因子分解
- 猎豹MFC--Socket编程基础TCP服务端和客户端
- 基于dos的多任务系统实现
- 读书笔记| (二)ARM9 嵌入式学习:代码 & 原理篇
- UML之用例图
- 回到顶部和回到底部动画
- 开发个人总结