Java容器源码分析-HashSet vs TreeSet vs LinkedHashSet
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相关推荐
- Java 容器源码分析之 TreeMap
TreeMap 是一种基于红黑树实现的 Key-Value 结构.在使用集合视图在 HashMap 中迭代时,是不能保证迭代顺序的: LinkedHashMap 使用了双向链表,保证按照插入顺序或者访 ...
- Java 容器源码分析之Queue
简介 Queue是一种很常见的数据结构类型,在java里面Queue是一个接口,它只是定义了一个基本的Queue应该有哪些功能规约.实际上有多个Queue的实现,有的是采用线性表实现,有的基于链表实现 ...
- 容器源码分析之TreeSet(五)
HashSet是借助于HashMap的key不允许重复这个特性来实现的.HashMap是操作键值对,而HashSet是操作HashMap的key完成相关操作,TreeSet比HashSet加了排序的功 ...
- Spring IOC 容器源码分析
Spring IOC 容器源码分析 创建时间: 2017-11-15 00:00:00 [TOC] Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring ...
- Spring IOC 容器源码分析 - 余下的初始化工作
1. 简介 本篇文章是"Spring IOC 容器源码分析"系列文章的最后一篇文章,本篇文章所分析的对象是 initializeBean 方法,该方法用于对已完成属性填充的 bea ...
- Spring IOC 容器源码分析 - 创建原始 bean 对象
1. 简介 本篇文章是上一篇文章(创建单例 bean 的过程)的延续.在上一篇文章中,我们从战略层面上领略了doCreateBean方法的全过程.本篇文章,我们就从战术的层面上,详细分析doCreat ...
- Spring IOC 容器源码分析 - 获取单例 bean
1. 简介 为了写 Spring IOC 容器源码分析系列的文章,我特地写了一篇 Spring IOC 容器的导读文章.在导读一文中,我介绍了 Spring 的一些特性以及阅读 Spring 源码的一 ...
- Spring IOC 容器源码分析系列文章导读 1
1. 简介 Spring 是一个轻量级的企业级应用开发框架,于 2004 年由 Rod Johnson 发布了 1.0 版本.经过十几年的迭代,现在的 Spring 框架已经非常成熟了.Spring ...
- Spring IOC 容器源码分析系列文章导读
1. 简介 前一段时间,我学习了 Spring IOC 容器方面的源码,并写了数篇文章对此进行讲解.在写完 Spring IOC 容器源码分析系列文章中的最后一篇后,没敢懈怠,趁热打铁,花了3天时间阅 ...
最新文章
- mysql 查看表结构,字段的基本信息(简单明了)。
- INADDR_ANY 最好的解释
- mysql安装提示create_MySQL5.1安装时出现Cannot create windows service for mysql.error:0
- 1万属性,100亿数据,每秒10万吞吐,架构如何设计?
- 基于Xml 的IOC 容器-解析配置文件路径
- LeetCode 439. 三元表达式解析器
- LeetCode 1361. 验证二叉树(图的出入度)
- Linux中msiexec无法运行,使用msiexec.exe绕过应用程序白名单(多种方法)
- 设计一个采用udp实现数据传输的程序_TCP/IP、UDP、HTTP、MQTT、CoAP这五种物联网协议...
- Red5流媒体服务器的搭建
- 【任玉刚】给Android程序员的一些面试建议
- 打印机连接计算机主机的,电脑怎样连接打印机,详细教您电脑如何连接网络打印机...
- PayPal 今天 Reopen?
- python scrapy 简单教程_python之scrapy入门教程
- 深度神经网络对人工智能推动的发展评述与应用分析
- Windows 10 安装STF实战
- win10安装GPU版tensorflow
- Python GUI编程之视频解析软件制作
- python int()函数详解
- 解决 pycharm 插件下载慢的问题
热门文章
- Sqlserver2014怎样配置远程连接
- Python中提示:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position
- 常用的相似性度量(距离总结)
- Warning: Mapping new ns http://schemas.android.com/repository/android/common/02 to old ns http://sch
- python ccbox_python--easygui
- python属性使用教程_Python对象的属性访问过程详解
- 你为何如此优秀?| 神策数据 2018 年获奖集锦
- 神策学堂发布——你有一份数据驱动指南待查收
- 2017 宋星大课堂福利赠票公布结果
- 模型剖析 | 如何解决业务运维的四大难题?