Java 8 集合不完全一览

原创 2017年02月07日 11:00:00

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

RMAN备份与恢复(8)——基于日志序列号的不完全恢复!

首先模拟数据库故障。 SQL> select * from v$log; GROUP# THREAD# SEQUENCE# BYTES MEMBERS AR...

java学习不完全查漏手册

java学习不完全查漏手册 本文是对部分java知识的索引总结,可以视为笔者的学习总结或者学习规划,也是近期对部分知识进行梳理归纳的一个提纲,后续会对各个章节进行展开描述,行为目的一是给自己个学习...

Java面试资料简单整理(不完全版)

静态变量和实例变量的区别? 在语法定义上的区别:静态变量前要加 static 关键字,而实例变量前则不加。 在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配...

Java扫雷游戏,不完全实现

  • 2010年04月30日 23:39
  • 190KB
  • 下载

Spring 4支持的Java 8新特性一览

转载于:http://www.infoq.com/cn/articles/spring-4-java-8?utm_source=infoq&utm_medium=related_content_lin...
  • zgmzyr
  • zgmzyr
  • 2015年11月14日 17:16
  • 1298

Spring 4支持的Java 8新特性一览

有众多新特性和函数库的Java 8发布之后,Spring 4.x已经支持其中的大部分。有些Java 8的新特性对Spring无影响,可以直接使用,但另有些新特性需要Spring的支持。本文将带您浏览S...

Spring 4支持的Java 8新特性一览

转载于:http://www.infoq.com/cn/articles/spring-4-Java-8?utm_source=infoq&utm_medium=related_content_lin...

java 集合一览

Collection 否 是 List 是 是 Set AbstractSet 否 否 ...
  • stayhsf
  • stayhsf
  • 2011年10月18日 10:30
  • 250
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java 8 集合不完全一览
举报原因:
原因补充:

(最多只允许输入30个字)