Java集合框架

  • Collection接口
    • List
      • LinkedList
      • ArrayList
      • Stack
      • Vector
    • Set
      • HashSet / LinkedHashSet
      • TreeSet
    • Queue
      • Deque
      • LinkedList
  • Map接口
    • HashMap / HashTable
      •  
    • LinkedHashMap
    • TreeMap
  • 并发集合
    • ConcorrentHashMap( 1.7 + 1.8 )
    • CopyOnWriteArrayList
    • CopyOnWriteSet


1. Collection接口 - List

1.1 LinkedList

  • 线程不安全:可以用 Collections.synchronizedList 替换
  • 又属于List,又属于Queue:双向链表 ,也是双端队列
  • 底层是Node类,允许null值
  • 相比ArrayList:查找慢,删除插入快,占用空间更大
  • Ref:https://www.jianshu.com/p/6a9cb631b2ef

1.2 ArrayList

  • 线程不安全:可以用 Vector 或 CopyOnWriteArrayList 或 Collections.synchronizedList 替换
  • 底层是 Object[] 数组,允许null值
  • 调用ArrayList()默认容量0,第一次添加元素后变成10,之后1.5倍扩容:0 -> 10 -> 15 -> 22 -> 33 -> ... 
  • 相比LinkedList: 查找快, 修改操作慢,因为需要Copy
  • Ref:https://www.jianshu.com/p/a01659ca07f8

1.3 Vector

  • 线程安全,但是效率很低,官方不推荐使用,大多数方法上都加了synchronized关键字
  • 底层是 Object[] 数组,允许null值
  • 扩容与ArrayList不一样,,默认容量是10,2倍扩容

1.4 Stack

  • Stack继承Vector,线程安全
  • 栈,特点:后入先出
  • 底层是Object[]实现
  • 一般用LinkedList当作栈使用

2. Collection接口 - Set

2.1 HashSet / LinkedHashSet

  • HashSet与HashMap底层差不多,线程不安全,可以用 Collections.SynchronizedSet 或 CopyOnWriteSet 代替
  • LinkedHashSet与LinkedHashMap底层差不多,多了双向链表,线程不安全,可以用 SynchronizedSortedSet 代替
  • HashSet允许null,但只能一个

2.2 TreeSet

  • 参考TreeMap

3. Collection接口 - Queue

3.1 Deque

3.2 LinkedList

见上1.1


4. Map接口

4.1 HashMap

4.2 HashTable

  • HashTable线程安全,但是效率很低,在大多数方法上加了synchronized关键字
  • HashTable不允许null值
  • HashTable直接使用对象的hashCode,不像 HashMap 涉及 二次抖动 等

4.3 LinkedHashMap

  • 底层与HashMap差不多,多维护了一个双向链表,线程不安全,可以用 Collections.SynchronizedSortedMap 代替
  • 原理:多了两个属性before和after用来维护双向链表
    • static class Entry<K,V> extends HashMap.Node<K,V> {
              Entry<K,V> before, after;
              Entry(int hash, K key, V value, Node<K,V> next) {
                  super(hash, key, value, next);
              }
      }
  • 性能没有HashMap高,因为要维护双向链表
  • Ref:https://blog.csdn.net/weixin_43184769/article/details/89357948

4.4 TreeMap

  • 根据key排序,内部原理红黑树
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值