Java 容器

概念

  • FIFO First in First out,先进先出 队列
  • LIFO Last in First out,后进先出 栈
  • RandomAccess,是一个标识,实现了改接口的容器,快速随机访问功能
  • 有序:插入的顺序保持,当遍历集合时会按照插入顺序展示;无序:不保持插入的顺序
  • 同步:即线程安全,可以在多线程下保持数据正确;不同步:线程不安全
  • 有界:有容量限制,会阻塞或者触发异常;无界:没有容量限制
  • 命名中带有Array都是数组实现,Linked都是链表实现

在这里插入图片描述

Collection 集合

List 序列

ArrayList

Vector
  • synchronized 同步方法和代码块
Stack LIFO栈
  • 后进先出(LIFO)栈,推荐使用Deque

LinkedList

  • 双向链表实现

CopyOnWriteArrayList

  • 同步
  • lock 锁实现,性能更好
  • 适合读多写少场景
  • 数据最终一致性,不能保证数据的实时一致性

Set 不可重复集合

TreeSet

  • TreeMap 实现

HashSet

  • HasMap实现
LinkedHashSet

CopyOnWriteArraySet

  • 同步
  • 基于CopyOnWriteArrayList 实现

ConcurrentSkipListSet

  • 同步
  • 有序
  • ConcurrentSkipListMap实现

Queue FIFO队列

AbstractQueue

PriorityQueue
  • 自己内部排序
  • 无界
  • 不同步
ConcurrentLinkedQueue
  • 无界
  • 同步

Deque 双端队列

  • 可以从头部和尾部获取元素
ArrayDeque
  • 无界
  • 不同步
ConcurrentLinkedDeque
  • 无界
  • 同步

BlockingQueue 阻塞队列

  • 同步
  • 有界
  • 当生产者向队列添加元素但队列已满时,生产者会被阻塞
  • 当消费者从队列移除元素但队列为空时,消费者会被阻塞
异常返回null阻塞超时
插入add(e)offer(e)put(e)offer(e,time,unit)
删除remove()poll()take()poll(time,unit)
检查element()peek()不适用不适用
ArrayBlockingQueue
  • 可选公平,降低吞吐量
  • 先阻塞的生产者线程,可以先往队列里插入元素
  • 先阻塞的消费者线程,可以先从队列里获取元素
LinkedBlockingQueue
  • ArrayBlockingQueue 吞吐量高
BlockingDeque 阻塞双端队列
LinkedBlockingDeque
PriorityBlockingQueue
  • 无界
  • 自己内部排序 同PriorityQueue
TransferQueue 传输队列
  • 生产者会一直阻塞直到所添加到队列的元素被某一个消费者所消费
LinkedTransferQueue
  • 无界

Map 映射

TreeMap

  • 可以自定义排序规则

HashMap

在这里插入图片描述

  • 数组(桶)+链表(数量小于8)+红黑树(大于等于8) 实现
  • 初始容量:默认16。如果指定必须是2的n次幂
  • 负载因子:默认0.75。
    • 调低负载因子,HashMap 的增删改查等操作的效率将会变高,这里是典型的拿空间换时间
    • 反之,则相反
  • 负载:初始容量*负载因子。超过负载会扩容
  • 扩容:
    • HashMap会扩容到原来的两倍
    • 每个元素重新Hash
    • 消耗性能

LinkedHashMap

Hashtable

  • synchronized 同步所有方法,效率不高

ConcurrentHashMap

  • volatile CAS 轻量级的同步
  • 效率高于HashTable

ConcurrentSkipListMap

EnumMap

  • key值为枚举
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值