JavaShuo
栏目
标签
JAVA的主要集合类的数据结构
时间 2019-12-13
标签
java
主要
集合
数据
结构
栏目
Java
繁體版
原文
原文链接
集合类的大体分类:List,Map和Set。
数组
1、 List
ArrayList
ArrayList维护着一个对象数组。若是调用new ArrayList()后,它会默认初始一个size=10的数组。
每次add操做都要检查数组容量,若是不够,从新设置一个初始容量1.5倍大小的新数组,而后再把每一个元素copy过去。
在数组中间插入或删除,都要移动后面的全部元素。(使用System.arraycopy())
LindedList
LinkedList的实现是一个双向链表。每一个节点除含有元素外,还包含向前,向后的指针。
新建一个LinkedList,生成一个头节点(header,就是一个头指针),它的元素为null。
它自包含,next和previous指针都指向本身。执行add(Object obj)方法后,会生成一个新节点:
Header节点的next指向链表的第一个节点,previous指向链表的最后一个节点,在这里都是first。再增长一个对象,它的形状像下面这样:
如今是一个标准的双向链表形状。每一个节点都有本身的next和previous指针。增长节点,只会对链表的指针进行操做,速度快。
LinkedList实现了Deque,因此它有双向队列的特征,在链表两端可增删数据。使用index查找对象时,会以index和size/2比较,从前或从后向中间搜索。ListIterator可向前或向后迭代。
比较ArrayList和LinkedList的结构,就能够得出:
(1) ArrayList的remove和add(index, Object)操做代价高,须要移动后面的每一个元素。
(2) LinkedList的get(index)操做代价高,它要先循环遍历list,找到Object
2、 Map
HashMap
HashMap的结构是一个散列桶,初始化时生成以下结构:
每一个bucket包含一个Entry(map自定义的一种结构,包含一个日后的指针)的链表。在put(key, value)后,它的结构以下:
将key的hashcode再次散列,而后用这个hash和length-1进行按位与操做,获得bucket的index,而后检查当前bucket的链表,有没有这个key,若是有替换value,没有则跟在链表的最后。
容许key和value均可以是null
Index=0的bucket存key=null的value,也能够是其它hashcode为0的项。
初始容量必须为2的幂次(个人理解是,在生成index的时候有这样的代码:hase ^ (length - 1)),length – 1的二进制代码为全1,则容易进行hash的设计)。
若是两个key散列后的index同样的话,第一个key生成的Entry先存在桶中,第二个key生成的Entry会将第一个Entry设为本身的next,串起来。(如图中,先put(yy, “first”),会将这个Entry设为bucket的第一项,后put(xx,”second”),则生成新Entry,它的next为key为yy的Entry,生成一个链表)。
在put操做中,会比较threshold(capacity * load_factor,一个临界值),若是size > threshold的话,生成一个当前bucket两倍数量的buckets,而后把现有的数据从新散列到新bucket中。
对HashMap迭代时,返回数据的顺序是:index从0到length-1,循环遍历每一个bucket,把不为null的数据取出,每一个bucket内的顺序由链表的顺序决定。而不是由插入数据决定。
LinkedHashMap
上面说过,Map的迭代不禁插入顺序决定。若是要保持这种顺序呢?就要新增长一种结构来保持。
LinkedHashMap是HashMap的子类,增长一个双向链表,用来存储每一个新加入的节点。在遍历时,按链表的顺序进行。其实差很少就是上面HashMap和LinkedList的和吧。
3、Set
HashSet
HashSet使用HashMap来保持元素。Key = 元素,value是一个公有的对象,对每一个元素都同样,在HashMap里面key是唯一的,固然很适合于构造set集合。等同于用HashMap包装了次,显示Set本身的特性。
最后还要提到集合类里面一个很重要的类:Collections,它有不少本身独特的静态方法。固然它主要提供几种特殊集合(List, Map,Set),能够调用静态方法来得到:Unmodifiable
(不可修改集合,不可添加或删除元素),Synchronize
(保持同步集合,它的基本每一个方法都加锁,防止并发操做),Checked
(声明之始传入特定类型,之后的操做都会验证加入元素是否属于已定类型),Singleton
(集合中只包含一个元素)。它们都是经过包装集合类中的抽象类得到,产生不一样的行为。
相关文章
1.
java主要集合类的数据结构学习
2.
Java:集合类的数据结构
3.
Java集合类的数据结构(一)
4.
Java集合类及其数据结构
5.
Java集合类结构
6.
JAVA总结(数据结构--集合)
7.
Java数据结构与算法之数据结构-逻辑结构-集合(二)------集合类分述图描述
8.
主要集合类和主要映射类总结
9.
java集合类的继承结构
10.
java基础--5.集合-3.集合中的数据结构
更多相关文章...
•
Redis和数据库的结合
-
Redis教程
•
Redis集合数据结构和常用命令
-
Redis教程
•
TiDB 在摩拜单车在线数据业务的应用和实践
•
Flink 数据传输及反压详解
相关标签/搜索
java集合类
数据结构+Java
java数据结构
数据集合
数据结构
java集合总结
集合类型的并发
数据结构题集
数据结构02
C++数据结构
快乐工作
Java
NoSQL教程
Redis教程
MyBatis教程
数据传输
数据库
数据业务
0
分享到微博
分享到微信
分享到QQ
每日一句
每一个你不满意的现在,都有一个你没有努力的曾经。
最新文章
1.
Excel教程:排序-筛选-切片-插入表格
2.
ZigBee ProfileID,DeviceID,ClusterID
3.
二维码背后不能不说的秘密Part1~
4.
基于迅为i.MX6平台 | 智能家居远程监控系统
5.
【入门篇】ESP8266直连智能音箱(天猫精灵)控制智能灯
6.
MongoDB安装问题
7.
【建议收藏】22个适合程序员多逛逛的网站
8.
【建议收藏】10个适合程序员逛的在线社区
9.
Attention-Based SeriesNet论文读后感
10.
Flutter中ListView复用原理探索
本站公众号
欢迎关注本站公众号,获取更多信息
相关文章
1.
java主要集合类的数据结构学习
2.
Java:集合类的数据结构
3.
Java集合类的数据结构(一)
4.
Java集合类及其数据结构
5.
Java集合类结构
6.
JAVA总结(数据结构--集合)
7.
Java数据结构与算法之数据结构-逻辑结构-集合(二)------集合类分述图描述
8.
主要集合类和主要映射类总结
9.
java集合类的继承结构
10.
java基础--5.集合-3.集合中的数据结构
>>更多相关文章<<