您的位置:首页 > 编程语言 > Java开发

Java容器源码分析-HashSet vs TreeSet vs LinkedHashSet

2017-10-18 00:00 351 查看
这几天看了下容器的源码,总结一下HashSet vs TreeSet vs LinkedHashSet的区别, 如下图,collection的继承实现分支,这里先只讲解set分支



1、HashSet vs TreeSet vs LinkedHashSet三者的数据结构分析

(1)HashSet:由哈希表(实际上是一个HashMap实例)支持。它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用null元素。对于HashSet中保存的对象,请注意正确重写其equals和hashCode方法,以保证放入的对象的唯一性。

注意:hashSet是利用HashMap的key进行数据存储。同时HashMap的key具有唯一性

参考:http://www.cnblogs.com/ITtangtang/p/3948538.html

(2) TreeSet:TreeSet实际上是TreeMap实现的。当我们构造TreeSet时;若使用不带参数的构造函数,则TreeSet的使用自然比较器;若用户需要使用自定义的比较器,则需要使用带比较器的参数。

参考:http://www.cnblogs.com/skywang12345/p/3311268.html

(3) LinkedHashSet: LinkedHashSet也是一个集合,与HashSet不同的是,LinkedHashSet是有序的,由于其继承了HashSet,所以构造方法中调用的是HashSet的构造方法,在HashSet的构造方法中有一个专门为LinkedHashSet重写的构造方法。并且其内部利用LinkedHashMap实现的。

参考:http://blog.csdn.net/wxl1234579/article/details/54971525

总结:

使用Set集合的主要原因是因为Set集合里面没有重复的元素。Set集合有三个常见的实现类:HashSet,TreeSet,LinkedHashSet。什么时候,选择哪一个使用非常重要。简单的说,如果你关注性能,应该使用HashSet;如果你需要一个有序的Set集合,应该使用TreeSet;如果你需要一个Set集合保存了原始的元素插入顺序,应该使用LinkedHashSet。

注意:如果要详细研究set的原理,请去查看相对应的map实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: