java集合

java集合框架图

Collection

List

  • ArrayList
    以Object数组形式存储数据,默认容量10;以size*3/2+1作为扩容容量;remove时,先校验index范围,再将index+1后的数据通过System.arraycopy往前位移,最后将末尾元素置空;访问快,但插入删除慢;循环方式有for/foreach,迭代器;非线程安全
  • Vector
    以Object数组形式存储数据,默认容量10;是ArrayList的synchronized实现
  • LinkedList
    是双向循环链表的链式线性表;查找时,如果index小于size >> 1,则从头节点开始找,否则从尾节点找;查找较慢,插入删除较快;非线程安全
  • CopyOnWriteArrayList
    写时复制的List,是一种读写分离的思想,用于读多写少的并发场景,如商品黑白名单;add操作会加锁,先复制容器,再添加元素,最后修改引用至新容器;get时不加锁;缺点:1、内存占用;2、数据一致性

Set

  • HashSet
    使用HashMap的key存放元素,所以无法重复

Map

  • HashMap
    以Entry数组形式存储数据,默认容量16,负载因子0.75;每个Entry中,都可以保存相同hash位置的下一个Entry节点,即HashMap可以保存hash冲突的元素,以Entry链表保存;允许key值为null的元素;put时,根据key的haseCode()进行hash运算,再获取存储索引的位置;如果数组大小不小于临界值(容量*负载因子),则扩容为现在大小的2倍;get时,如果Entry节点的hash相同&&key的值相同,则返回此节点。
  • Hashtable
    以Entry数组形式存储数据,默认容量11,负载因子0.75;是HashMap的synchronized实现。
  • ConcurrentHashMap
    采用锁分段技术,每个ConcurrentHashMap包含一个Segment数组,每个Segment包含一个HashEntry数组。get时不加锁,除非读到空值才会对某个Segment加锁重读,get时读取的共享变量如count、value都是volatile变量。put时先定位到Segment,并对其加锁,还需判断是否需扩容,再插入。迭代器、get、clear是弱一致性的,详见(http://ifeve.com/concurrenthashmap-weakly-consistent/)
  • WeakHashMap
    同HashMap类似,只是Entry被定义为WeakReference;成员变量ReferenceQueue保存的是被GC回收的键;在get和size/resize,会调用expungeStaleEntries(),从ReferenceQueue中查询并清理持有弱引用的key对象。
  • Queue
    先进先出(FIFO)规则,从尾部添加,从头部取出;操作:add、remove和element在队列满或空时会抛异常,offer、poll、peek在队列满或空时会返回null或false,put和take在队列满或空时会阻塞;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值