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

转载于:https://www.cnblogs.com/leonxyzh/p/7288970.html

Java 8 集合不完全一览相关推荐

  1. java 数组集合转换_Java 实例 – 集合转数组

    Java 实例 - 集合转数组 以下实例演示了如何使用 Java Util 类的 list.add() 和 list.toArray() 方法将集合转为数组: /* author by w3cscho ...

  2. java icomparer_集合数据处理(C#、JavaScript 和 Java)

    Java 丢了好多年,最近在拣起来,首先当然是了解这么多年来它的变化,于是发现了 Java 8 的java.util.stream.在学习和试验的过程中,相比较于 C# 和 javascript,有那 ...

  3. java中集合的区别_Java中的集合与集合之间的区别

    Java收集框架用于操纵对象的收集.收集框架包含多个包装器类,便利类,用于传统实现的类,例如vector和Hashtable,收集接口等. 集合是Java集合框架中的接口.它分为两部分-Java ut ...

  4. Java面试集合(二)

    前言 大家好,给大家带来Java面试集合(二)的概述,希望你们喜欢 二 1.请问线程有哪些状态? 新建状态(New) 就绪状态(Runnable) 运行状态(Running) 阻塞状态(Blocked ...

  5. java中集合的排序

    java中集合的排序 import java.util.Set; import java.util.HashSet; import java.util.List; import java.util.A ...

  6. (7)Java数据结构--集合map,set,list详解

    MAP,SET,LIST,等JAVA中集合解析(了解) - clam_clam的专栏 - CSDN博---有颜色, http://blog.csdn.net/clam_clam/article/det ...

  7. java各种集合的线程安全

    转载自  java各种集合的线程安全 线程安全 首先要明白线程的工作原理,jvm有一个main memory,而每个线程有自己的working  memory,一个线程对一个variable进行操作时 ...

  8. Java Map集合面试题汇总

    转载自 Java Map集合面试题汇总 1. 你都知道哪些常用的Map集合? 2.Collection集合接口和Map接口有什么关系? 3.HashMap是线程安全的吗?线程安全的Map都有哪些?性能 ...

  9. java 读取集合到流中_Java 10:将流收集到不可修改的集合中

    java 读取集合到流中 Java 10引入了几种新方法来促进不可修改集合的创建. List.copyOf , Set.copyOf和Map.copyOf方法从现有实例创建新的集合实例. 例如: Li ...

最新文章

  1. jittor拟合sin函数
  2. 【Transformer】ACMix:On the Integration of Self-Attention and Convolution
  3. Android自己的自动化测试Monkeyrunner和用法示例
  4. abaqus python 建立节点集合_在Python中创建Abaqus集
  5. NBU7.5升级至8.1.2(在不考虑授权的情况)
  6. javascript、jquery获取网页的高度和宽度
  7. python import模块熟悉方法
  8. 【Django】Specifying a namespace in include() without providing an app_name is not supported
  9. FFmpeg — 视频剪辑、动静水印、转场特效[gl-transitions]
  10. 基于java的扫雷游戏设计01
  11. 7-1 计算物体自由下落的距离
  12. 2021前端面试经典计算题总结。
  13. 英语钻石法则(六)-----学习地道、实用的材料
  14. firefox 浏览器证书问题
  15. 百度天气预报接口使用详细
  16. 初识C语言——冒泡排序法
  17. WEB端和手机端-三种提示框架
  18. vue3解读—reactivity响应式实现
  19. IAR工程中的各个文件的含义
  20. 当了10年程序员,我开窍了

热门文章

  1. Android启动流程
  2. 使用jenkins进行git多分支项目打包时的一个小问题
  3. Listary-不仅仅是快速检索文件
  4. Smarty s02
  5. C#实现Web文件的上传
  6. 通过js encodeURIComponent传到服务器的乱码问题
  7. 第二弹:超全Python学习资源整理(进阶系列)
  8. java finereport_java报表FineReport_JS整理
  9. SpringSecurity分布式整合之jwt和rsa说明
  10. Gateway网关-快速入门