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实现
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实现
相关文章推荐
- java容器源码分析(八)——LinkedHashSet
- java源码分析之HashSet及LinkedHashSet
- Java Collections Framework之HashSet及LinkedHashSet源码分析(基于JDK1.6)
- JDK源码学习(6)-java.util.HashSet & java.util.LinkedHashSet & java.util.TreeSet
- java 源码分析之HashSet及LinkedHashSet
- Java-Collection源码分析(十二)——Set、AbstractSet、HashSet和LinkedHashSet
- Java容器源码分析-HashMap vs TreeMap vs LinkedHashMap
- Java集合源码分析(六)TreeSet<E>
- Java基础 集合框架 共性方法 迭代器 ArrayList LinkedList Vector HashSet TreeSet
- Java 集合系列之 Set架构 TreeSet HashSet 详细介绍(源码解析)和使用示例
- Java源码分析之HashSet
- java----map,set,hash的源码分析---篇1
- Java源码初学_HashSet&LinkedHashSet
- 【Java源码】HashSet、LinkedHashSet
- JAVA LinkedHashSet 和 LinkedHashMap源码剖析
- Java源码之LinkedHashSet
- HashSet vs. TreeSet vs. LinkedHashSet
- HashSet vs TreeSet vs LinkedHashSet
- HashSet vs. TreeSet vs. LinkedHashSet
- 【集合框架】JDK1.8源码分析HashSet && LinkedHashSet(八)