2019独角兽企业重金招聘Python工程师标准>>>

这几天看了下容器的源码,总结一下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实现

转载于:https://my.oschina.net/jiahaov/blog/1552616

Java容器源码分析-HashSet vs TreeSet vs LinkedHashSet相关推荐

  1. Java 容器源码分析之 TreeMap

    TreeMap 是一种基于红黑树实现的 Key-Value 结构.在使用集合视图在 HashMap 中迭代时,是不能保证迭代顺序的: LinkedHashMap 使用了双向链表,保证按照插入顺序或者访 ...

  2. Java 容器源码分析之Queue

    简介 Queue是一种很常见的数据结构类型,在java里面Queue是一个接口,它只是定义了一个基本的Queue应该有哪些功能规约.实际上有多个Queue的实现,有的是采用线性表实现,有的基于链表实现 ...

  3. 容器源码分析之TreeSet(五)

    HashSet是借助于HashMap的key不允许重复这个特性来实现的.HashMap是操作键值对,而HashSet是操作HashMap的key完成相关操作,TreeSet比HashSet加了排序的功 ...

  4. Spring IOC 容器源码分析

    Spring IOC 容器源码分析 创建时间: 2017-11-15 00:00:00 [TOC] Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring ...

  5. Spring IOC 容器源码分析 - 余下的初始化工作

    1. 简介 本篇文章是"Spring IOC 容器源码分析"系列文章的最后一篇文章,本篇文章所分析的对象是 initializeBean 方法,该方法用于对已完成属性填充的 bea ...

  6. Spring IOC 容器源码分析 - 创建原始 bean 对象

    1. 简介 本篇文章是上一篇文章(创建单例 bean 的过程)的延续.在上一篇文章中,我们从战略层面上领略了doCreateBean方法的全过程.本篇文章,我们就从战术的层面上,详细分析doCreat ...

  7. Spring IOC 容器源码分析 - 获取单例 bean

    1. 简介 为了写 Spring IOC 容器源码分析系列的文章,我特地写了一篇 Spring IOC 容器的导读文章.在导读一文中,我介绍了 Spring 的一些特性以及阅读 Spring 源码的一 ...

  8. Spring IOC 容器源码分析系列文章导读 1

    1. 简介 Spring 是一个轻量级的企业级应用开发框架,于 2004 年由 Rod Johnson 发布了 1.0 版本.经过十几年的迭代,现在的 Spring 框架已经非常成熟了.Spring ...

  9. Spring IOC 容器源码分析系列文章导读

    1. 简介 前一段时间,我学习了 Spring IOC 容器方面的源码,并写了数篇文章对此进行讲解.在写完 Spring IOC 容器源码分析系列文章中的最后一篇后,没敢懈怠,趁热打铁,花了3天时间阅 ...

最新文章

  1. mysql 查看表结构,字段的基本信息(简单明了)。
  2. INADDR_ANY 最好的解释
  3. mysql安装提示create_MySQL5.1安装时出现Cannot create windows service for mysql.error:0
  4. 1万属性,100亿数据,每秒10万吞吐,架构如何设计?
  5. 基于Xml 的IOC 容器-解析配置文件路径
  6. LeetCode 439. 三元表达式解析器
  7. LeetCode 1361. 验证二叉树(图的出入度)
  8. Linux中msiexec无法运行,使用msiexec.exe绕过应用程序白名单(多种方法)
  9. 设计一个采用udp实现数据传输的程序_TCP/IP、UDP、HTTP、MQTT、CoAP这五种物联网协议...
  10. Red5流媒体服务器的搭建
  11. 【任玉刚】给Android程序员的一些面试建议
  12. 打印机连接计算机主机的,电脑怎样连接打印机,详细教您电脑如何连接网络打印机...
  13. PayPal 今天 Reopen?
  14. python scrapy 简单教程_python之scrapy入门教程
  15. 深度神经网络对人工智能推动的发展评述与应用分析
  16. Windows 10 安装STF实战
  17. win10安装GPU版tensorflow
  18. Python GUI编程之视频解析软件制作
  19. python int()函数详解
  20. 解决 pycharm 插件下载慢的问题

热门文章

  1. Sqlserver2014怎样配置远程连接
  2. Python中提示:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position
  3. 常用的相似性度量(距离总结)
  4. Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://sch
  5. python ccbox_python--easygui
  6. python属性使用教程_Python对象的属性访问过程详解
  7. 你为何如此优秀?| 神策数据 2018 年获奖集锦
  8. 神策学堂发布——你有一份数据驱动指南待查收
  9. 2017 宋星大课堂福利赠票公布结果
  10. 模型剖析 | 如何解决业务运维的四大难题?