JDK 8

List

名称 线程安全 数据结构 允许 null 默认初始容量 扩容策略 备注
ArrayList 不安全 数组 允许 10 1.5 * old
LinkedList 不安全 双链表 允许 N/A N/A 作为 List 使用时,最好换用低复杂度的 TreeList
CopyOnWriteArrayList 安全 数组 + 快照 允许 0 +1

Map

名称 线程安全 数据结构 允许 null key 允许 null value 有序性 默认初始容量 扩容策略 备注
HashMap 不安全 多个(单链表或者红黑树)组成的数组 允许 允许 无序 16 2 * old
IdentityHashMap 不安全 数组 允许 允许 无序 32 ?
LinkedHashMap 不安全 多个双链表组成的数组 允许 允许 有序(access-order 或者 insertion-order) 16 2 * old
TreeMap 不安全 红黑树 不允许 允许 有序 N/A N/A
EnumMap 不安全 数组 不允许 允许 有序 N/A N/A
ConcurrentHashMap 安全 多个(单链表或者红黑树)组成的数组 不允许 不允许 无序 16 2 * old
ConcurrentSkipListMap 安全 跳表 不允许 不允许 有序 N/A ?

Set

名称 线程安全 数据结构 允许 null 有序性 备注
HashSet 不安全 HashMap 允许 无序
LinkedHashSet 不安全 LinkedHashMap 允许 有序(insertion-order)
TreeSet 不安全 TreeMap 不允许 有序
ConcurrentSkipListSet 安全 ConcurrentSkipListMap 不允许 有序
CopyOnWriteArraySet 安全 CopyOnWriteArrayList 允许 无序

Queue

名称 线程安全 数据结构 允许 null 默认初始容量 扩容策略 备注
ArrayDeque 不安全 数组 不允许 16 2 * old head 从数组的最大下标开始变小,tail 从 0 开始变大
PriorityQueue 不安全 平衡最小二叉堆 不允许 11 old < 64 则 2 * old; 否则 1.5 * old 空穴, sift up,sift down
ConcurrentLinkedQueue 安全 单链表 + CAS 不允许 N/A N/A
ConcurrentLinkedDeque 安全 双链表 + CAS 不允许 N/A N/A
ArrayBlockingQueue 安全 循环数组 不允许 N/A 定长, 不可扩容 有 fair 选项; 2. 有一把公共的 ReentrantLock 与 notFull、notEmpty 两个 Condition 管理队列满或空时的阻塞状态
LinkedBlockingQueue 安全 单链表 不允许 N/A 定长或无界 利用链表的特征,分离了 takeLock 与 putLock 两把锁,继续用 notEmpty、notFull 管理队列满或空时的阻塞状态
LinkedBlockingDeque 安全 双链表 不允许 N/A 定长或无界 利用链表的特征,分离了 takeLock 与 putLock 两把锁,继续用 notEmpty、notFull 管理队列满或空时的阻塞状态
PriorityBlockingQueue 安全 平衡最小二叉堆 不允许 11 old < 64 则 2 * old; 否则 1.5 * old 空穴, sift up,sift down
DelayQueue 安全 PriorityQueue 不允许 见 PriorityQueue 见 PriorityQueue ScheduledThreadPoolExecutor 用了类似的结构
SynchronousQueue 安全 N/A 不允许 1 N/A 有 fair 选项
LinkedTransferQueue 安全 单链表 + CAS 不允许 N/A N/A

Java 8 集合不完全一览的更多相关文章

  1. 【Java】集合_学习笔记

    一.集合 1.集合类也称容器类,主要负责保存.盛装其他数据. 2.集合可以保存数量不确定的数据,保存具有映射关系的数据(也称关联数组). 3.Java5后提供一些多线程安全的集合类,放在java.ut ...

  2. java的集合框架最全详解

    java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...

  3. 谈谈Java的集合组件

    让我们一起谈谈Java的集合组件 我们在使用Java的时候,都会遇到并使用到Java的集合.在这里通过自己的理解和网上的资源对Java的集合方面的使用做一个简单的讲解和总结. Java主要分为3个集合 ...

  4. java.util 集合框架集合

    java的集合框架为程序提供了一种处理对象组的标准方式.设计了一系列标准泛型接口: ⑴Collection ()接口,扩展了Iterable接口,位于集合层次结构的顶部,因此所有的集合都实现Colle ...

  5. Java基础——集合框架

    Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...

  6. Java学习-集合(转)

    在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!java中集合大家族的成员实在是太丰富了,有常用的ArrayList. ...

  7. java的集合框架之一

    java是一套很成熟的东西,很多商用的东西都喜欢用它,用的人多,稳定.不过一般也不怎么说起它,因为太常见了,私下里说,写java应用层得就像农民工,每一处都是搭积木,根据设计师的东西如何优雅地搭好积木 ...

  8. 浅谈Java的集合框架

    浅谈Java的集合框架 一.    初识集合 重所周知,Java有四大集合框架群,Set.List.Queue和Map.四种集合的关注点不同,Set 关注事物的唯一性,List 关注事物的索引列表,Q ...

  9. Java之集合初探(一)

    一.集合概述.区别 集合是一种容器,数组也是一种容器 在Java编程中,装各种各样的对象(引用类型)的叫做容器. 为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的 ...

随机推荐

  1. post and get

    POST和GET是Web编程中的两个术语,他们是通过URI访问resource的两种方式.简单的说, GET 是把要访问的资源嵌入在URI中. 假设你在一个页面 http://www.myphone. ...

  2. Intellij Idea 13:导入openfire源代码

    网络上已经有篇关于openfire导入到Intellij Idea的文章(http://www.th7.cn/Program/java/201404/187018.shtml),不过在我导入的过程中, ...

  3. xpath元素查找提示is not clickable

    1.用xpath可以在chrome找到 $x("//mandatory-config-dialog[@is-show='isShowMandatoryConfig']/div/div[2]/ ...

  4. TTS-零基础入门之停止列表中单条语音播报

    做了一个语音 循环播报列表信息.当我新删除了一天列表之后,发现它仅仅有在下一轮播报中才会取消.这明显是不合理的. 一開始的代码是这样写的. <span style="font-fami ...

  5. Android内存解析(一)—从Linux系统内存逐步认识Android应用内存

    总述 Android应用程序被限制了内存使用上限,一般为16M或24M(具体看系统设置),当应用的使用内存超过这个上限时,就会被系统认为内存泄漏,被kill掉.所以在android开发时,管理好内存的 ...

  6. C#如何读写和创建INI文件(经典)转

    C#如何读写和创建INI文件 分类: c#程序设计2011-11-27 20:42 4935人阅读 评论(2) 收藏 举报 inic#stringbuffernullfile 在做项目过程中,有时需要 ...

  7. leetcode链表相关

    目录 2/445两数相加 综合题(328奇偶链表, 206反转链表, 21合并两个有序链表 ) 92反转链表 II 链表排序(148排序链表, 876链表的中间结点) 142环形链表 II 160相交 ...

  8. PCB 奥宝LDI 输出自动改周期检测内容

    继续完善奥宝LDI输出,在自动更新周期发现前期梳理不过完善或出些从未考虑到的工艺问题, 今天将更改线路周期检测内容整理如下

  9. selenium3 + python3 - alert定位

    一.alert\confirm\prompt弹出框操作主要方法有: text:获取文本值 accept() :点击"确认" dismiss() :点击"取消"或 ...

  10. ThreadLocal类详解

    学习一个东西首先要知道为什么要引入它,就是我们能用它来干什么.所以我们先来看看ThreadLocal对我们到底有什么用,然后再来看看它的实现原理. ThreadLocal如果单纯从名字上来看像是“本地 ...