Java 8 集合不完全一览
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 集合不完全一览的更多相关文章
- 【Java】集合_学习笔记
一.集合 1.集合类也称容器类,主要负责保存.盛装其他数据. 2.集合可以保存数量不确定的数据,保存具有映射关系的数据(也称关联数组). 3.Java5后提供一些多线程安全的集合类,放在java.ut ...
- java的集合框架最全详解
java的集合框架最全详解(图) 前言:数据结构对程序设计有着深远的影响,在面向过程的C语言中,数据库结构用struct来描述,而在面向对象的编程中,数据结构是用类来描述的,并且包含有对该数据结构操作 ...
- 谈谈Java的集合组件
让我们一起谈谈Java的集合组件 我们在使用Java的时候,都会遇到并使用到Java的集合.在这里通过自己的理解和网上的资源对Java的集合方面的使用做一个简单的讲解和总结. Java主要分为3个集合 ...
- java.util 集合框架集合
java的集合框架为程序提供了一种处理对象组的标准方式.设计了一系列标准泛型接口: ⑴Collection ()接口,扩展了Iterable接口,位于集合层次结构的顶部,因此所有的集合都实现Colle ...
- Java基础——集合框架
Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...
- Java学习-集合(转)
在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!java中集合大家族的成员实在是太丰富了,有常用的ArrayList. ...
- java的集合框架之一
java是一套很成熟的东西,很多商用的东西都喜欢用它,用的人多,稳定.不过一般也不怎么说起它,因为太常见了,私下里说,写java应用层得就像农民工,每一处都是搭积木,根据设计师的东西如何优雅地搭好积木 ...
- 浅谈Java的集合框架
浅谈Java的集合框架 一. 初识集合 重所周知,Java有四大集合框架群,Set.List.Queue和Map.四种集合的关注点不同,Set 关注事物的唯一性,List 关注事物的索引列表,Q ...
- Java之集合初探(一)
一.集合概述.区别 集合是一种容器,数组也是一种容器 在Java编程中,装各种各样的对象(引用类型)的叫做容器. 为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的 ...
随机推荐
- UVA 10069 Distinct Subsequences(DP)
考虑两个字符串,我们用dp[i][j]表示字串第到i个和字符串到第j个的总数,由于字串必须连续 因此dp[i][j]能够有dp[i][j-1]和dp[i-1][j-1]递推而来,而不能由dp[i-1] ...
- 初识ASP.NET---点滴的积累---ASP.NET学习小结
差点儿相同十多天前学习完了北大青鸟的学习视频,没想到没几天的时间就看完了XML视频和牛腩的Javascript视频.学习完了也该总结总结.理理自己的思路.消化一下自己学习到的东西. 视频中的理论知识并 ...
- Swift代理和传值
第一个视图控制器: import UIKit // 遵循协议 class ViewController: UIViewController,SecondVCDelegate { override fu ...
- mongo集群的监控(一)
由于工作中总是遇到一些私有化部署和不同环境的mongo server异常,为了统一方便的监控其运行情况,我筛选了多个工具,最终选择了motop. motop是一款用python编写的实时监控工具,可以 ...
- 【九章算法免费讲座第一期】转专业找CS工作的“打狗棒法”
讲座时间: 美西时间6月5日18:30-20:00(周五) 北京时间6月6日09:30-11:00(周六a.m) 讲座安排: 免费在线直播讲座 报名网址: http://t.cn/R2XgMSH,或猛 ...
- 【BASH】bash shell的使用实例
************************************************************************ ****原文:blog.csdn.net/clark_ ...
- Apache日志优化
apache执行时会记录其处理的全部请求的相关信息.同一时候,也会记录在处理过程中发生异常状况的相关信息. server能够用多种格式将与请求相关的活动信息记录在多个日志文件里,只是却仅仅能记录一份错 ...
- samba笔记
############ 1.安装网络yum ############ 2.安装createrepo [root@localhost ~]# yum install createrepo-0.9.8- ...
- luogu1005 矩阵取数游戏
题目大意 一个矩阵,每次从每一行的行首或行尾取一个数,每一行的价值为 取的数*2^当前取数的次数,每一次的价值为每一行的价值的和.求得到的价值的最大值. 思路 #include <cstdio& ...
- Hibernate多表映射(三)
一对多|多对一 一个分类对应多个商品,一个商品只属于一个分类 创建分类表 products用set装,set特点值不能够重复 package com.hibernate.domain; import ...