技术复习-java集合类

本文详细解析了Java集合框架中的List、Map和Set,包括ArrayList、LinkedList、HashMap、ConcurrentHashMap、HashSet等核心类的实现原理及应用场景。探讨了数组、链表、红黑树在集合中的运用,以及扩容策略和线程安全处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用集合 Set MAP List

一.List
  1. ArrayList 由数组构成的List object[] elementData 实际存储的数组 int size 实际长度 int DEFAULT_CAPACITY = 10 初始容量10. 扩容过程:put的时候如果size+1>elementData.length,则对elementData扩容至1.5倍

  2. LinkedList 由双向链表构成的数组

  3. Vector 由数组构成的线性安全的List 在每个方法前加synchronized来保证安全。

二、Map

保存KV对,K不可重复

  1. HashMap Node<K,V>[] table 实际存储是由链表组成的数组。 int DEFAULT_INITIAL_CAPACITY = 1 << 4 数组默认长度16 final float loadFactor; 负载因子,初始值0.75.当前数组长度 * loadFactor来判断是否需要扩容。 int threshold ; The next size value at which to resize (capacity * load factor). 扩容过程:如果size+1 > threshold 则进行扩容,table长度扩大2倍。然后链表上的一一挪到正确的新的数组上。

1.8以后HashMap下的链表进行优化了,改成当链表的长度大于8的时候优化成红黑树。

  1. ConcurrentHashMap 线性安全的,通过分段把锁的粒度降低,提高效率

  2. Hashtable 线性安全,通过方法前加上synchronized来锁,效率较低。

三、HashSet

保存K HashMap<E,Object> map; public boolean add(E e) { return map.put(e, PRESENT)==null; } HashSet内部实际是一个HashMap,把值作为Key放入HashMap中。

转载于:https://my.oschina.net/u/2250599/blog/3038685

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值