Java集合八股–概念
  1. ArrayList: 动态数组,支持动态增长。
  2. LinkedList: 双向链表,支持快速的插入和删除操作。
  3. HashSet: 基于HashMap实现的Set集合,用于存储唯一元素。
  4. LinkedHashSet:在保证元素唯一的同时,能按插入顺序访问。
  5. TreeMap: 基于红黑树实现的有序Map集合,可以按照键的顺序进行排序。
  6. LinkedHashMap: 基于哈希表和双向链表实现的Map集合,保持插入顺序或访问顺序。
  7. PriorityQueue: 优先队列,可以按照比较器或元素的自然顺序进行排序。

ArrayList[数组]:可变列表,非线程安全(方法无锁)。底层采用数组实现。扩容时采用剪切数组的方式。支持对元素的快速随机访问。尾部操作效率高,中部操作效率低。

Vecor[数组]:线程安全的动态数组,内部方法基本都有synchronized修饰。扩容时采用剪切数组的方式。

HashSet:底层通过HashMap实现,HashMap的Key就是HashSet存储的元素,Value全部相同。由Key的不可重复特性保证元素唯一。

TreeSet:

HashMap:JDK1.8之前采用数组+链表,其中数组记录桶的index,一个桶存放很多个键值对(类似于Redis图形化界面),链表是为了解决Hash冲突。JDK1.8之后采用数组+链表/红黑树:当数组长度(桶个数)>=64且链表长度>=8(依据泊松分布,长度为8的概率很低)时会将链表转为红黑树。当节点长度<7时转回链表。

TreeMap:

HashTable:线程安全的哈希表,会锁整个T哈希表,不推荐使用。

BlockingQueue:


LinkedList[链表]:双向链表,支持高效的头尾插入/删除和作为双端队列使用。需要注意的是:”LinkedList 插入/删除比 ArrayList 更快”是一个常见误区:其 O(1) 的前提是已经持有目标节点的引用;如果要在任意位置插入/删除,仍需先 O(n) 遍历链表找到位置,大多数场景下 LinkedList 反而比 ArrayList 慢,这也是现在主流建议优先使用 ArrayList 的原因。

LinkedHashSet:通过LinkedHashMap实现,有序。应用场景:浏览器历史记录

LinkedHashMap:基于HashMap,加入了双向链表保证按插入顺序排序。同时是尾插法,当数组长度满了自动删头部数组,可用于实现LRU(最近最少使用)缓存。

LinkedBlockingDeque:


ConcurrentHashMap:线程安全,Node数组+链表+红黑树实现。锁的是段(包含多个桶),锁粒度小。JDK1.8之后锁的是桶,粒度更小.

ConcurrentSkipListSet:

ConcurrentSkipListMap:

ConcurrentLinkedQueue:

ConcurrentBlockingDeque:


CopyOnWriteArrayList:

CopyOnWriteArraySet:


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇