From 23efacc28e9237a2be95f99ad13a5cb251ac43f4 Mon Sep 17 00:00:00 2001 From: guide Date: Sun, 7 Nov 2021 20:01:48 +0800 Subject: [PATCH] =?UTF-8?q?Update=20java=E9=9B=86=E5=90=88=E6=A1=86?= =?UTF-8?q?=E6=9E=B6=E5=9F=BA=E7=A1=80=E7=9F=A5=E8=AF=86&=E9=9D=A2?= =?UTF-8?q?=E8=AF=95=E9=A2=98=E6=80=BB=E7=BB=93.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...›†åˆæ¡†æž¶åŸºç¡€çŸ¥è¯†&é¢è¯•题总结.md | 59 +------------------ 1 file changed, 3 insertions(+), 56 deletions(-) diff --git a/docs/java/collection/javaé›†åˆæ¡†æž¶åŸºç¡€çŸ¥è¯†&é¢è¯•题总结.md b/docs/java/collection/javaé›†åˆæ¡†æž¶åŸºç¡€çŸ¥è¯†&é¢è¯•题总结.md index 805b29a2..b0668d0a 100644 --- a/docs/java/collection/javaé›†åˆæ¡†æž¶åŸºç¡€çŸ¥è¯†&é¢è¯•题总结.md +++ b/docs/java/collection/javaé›†åˆæ¡†æž¶åŸºç¡€çŸ¥è¯†&é¢è¯•题总结.md @@ -1,54 +1,3 @@ - - -- [1. 剖æžé¢è¯•最常è§é—®é¢˜ä¹‹ Java é›†åˆæ¡†æž¶](#1-剖æžé¢è¯•最常è§é—®é¢˜ä¹‹-java-é›†åˆæ¡†æž¶) - - [1.1. é›†åˆæ¦‚è¿°](#11-é›†åˆæ¦‚è¿°) - - [1.1.1. Java é›†åˆæ¦‚览](#111-java-é›†åˆæ¦‚览) - - [1.1.2. 说说 List, Set, Queue, Map 四者的区别?](#112-说说-list-set-queue-map-四者的区别) - - [1.1.3. é›†åˆæ¡†æž¶åº•层数æ®ç»“构总结](#113-é›†åˆæ¡†æž¶åº•层数æ®ç»“构总结) - - [1.1.3.1. List](#1131-list) - - [1.1.3.2. Set](#1132-set) - - [1.1.3.3 Queue](#1133-queue) - - [1.1.3.4. Map](#1134-map) - - [1.1.4. 如何选用集åˆ?](#114-如何选用集åˆ) - - [1.1.5. 为什么è¦ä½¿ç”¨é›†åˆï¼Ÿ](#115-为什么è¦ä½¿ç”¨é›†åˆ) - - [1.2. Collection 孿ޥå£ä¹‹ List](#12-collection-孿ޥå£ä¹‹-list) - - [1.2.1. Arraylist å’Œ Vector 的区别?](#121-arraylist-å’Œ-vector-的区别) - - [1.2.2. Arraylist 与 LinkedList 区别?](#122-arraylist-与-linkedlist-区别) - - [1.2.2.1. 补充内容:åŒå‘链表和åŒå‘循环链表](#1221-补充内容åŒå‘链表和åŒå‘循环链表) - - [1.2.2.2. 补充内容:RandomAccess 接å£](#1222-补充内容randomaccess-接å£) - - [1.2.3. 说一说 ArrayList 的扩容机制å§](#123-说一说-arraylist-的扩容机制å§) - - [1.3. Collection 孿ޥå£ä¹‹ Set](#13-collection-孿ޥå£ä¹‹-set) - - [1.3.1. comparable å’Œ Comparator 的区别](#131-comparable-å’Œ-comparator-的区别) - - [1.3.1.1. Comparator 定制排åº](#1311-comparator-定制排åº) - - [1.3.1.2. é‡å†™ compareTo æ–¹æ³•å®žçŽ°æŒ‰å¹´é¾„æ¥æŽ’åº](#1312-é‡å†™-compareto-æ–¹æ³•å®žçŽ°æŒ‰å¹´é¾„æ¥æŽ’åº) - - [1.3.2. æ— åºæ€§å’Œä¸å¯é‡å¤æ€§çš„å«ä¹‰æ˜¯ä»€ä¹ˆ](#132-æ— åºæ€§å’Œä¸å¯é‡å¤æ€§çš„å«ä¹‰æ˜¯ä»€ä¹ˆ) - - [1.3.3. 比较 HashSetã€LinkedHashSet å’Œ TreeSet 三者的异åŒ](#133-比较-hashsetlinkedhashset-å’Œ-treeset-三者的异åŒ) - - [1.4 Collection 孿ޥå£ä¹‹ Queue](#14-collection-孿ޥå£ä¹‹-queue) - - [1.4.1 Queue 与 Deque 的区别](#141-queue-与-deque-的区别) - - [1.4.2 ArrayDeque 与 LinkedList 的区别](#142-arraydeque-与-linkedlist-的区别) - - [1.4.3 说一说 PriorityQueue](#143-说一说-priorityqueue) - - [1.5. Map 接å£](#15-map-接å£) - - [1.5.1. HashMap å’Œ Hashtable 的区别](#151-hashmap-å’Œ-hashtable-的区别) - - [1.5.2. HashMap å’Œ HashSet 区别](#152-hashmap-å’Œ-hashset-区别) - - [1.5.3. HashMap å’Œ TreeMap 区别](#153-hashmap-å’Œ-treemap-区别) - - [1.5.4. HashSet 如何检查é‡å¤](#154-hashset-如何检查é‡å¤) - - [1.5.5. HashMap 的底层实现](#155-hashmap-的底层实现) - - [1.5.5.1. JDK1.8 之å‰](#1551-jdk18-之å‰) - - [1.5.5.2. JDK1.8 之åŽ](#1552-jdk18-之åŽ) - - [1.5.6. HashMap 的长度为什么是 2 的幂次方](#156-hashmap-的长度为什么是-2-的幂次方) - - [1.5.7. HashMap 多线程æ“作导致死循环问题](#157-hashmap-多线程æ“作导致死循环问题) - - [1.5.8. HashMap 有哪几ç§å¸¸è§çš„é历方å¼?](#158-hashmap-有哪几ç§å¸¸è§çš„é历方å¼) - - [1.5.9. ConcurrentHashMap å’Œ Hashtable 的区别](#159-concurrenthashmap-å’Œ-hashtable-的区别) - - [1.5.10. ConcurrentHashMap 线程安全的具体实现方å¼/底层具体实现](#1510-concurrenthashmap-线程安全的具体实现方å¼åº•层具体实现) - - [1.5.10.1. JDK1.7ï¼ˆä¸Šé¢æœ‰ç¤ºæ„图)](#15101-jdk17ä¸Šé¢æœ‰ç¤ºæ„图) - - [1.5.10.2. JDK1.8 ï¼ˆä¸Šé¢æœ‰ç¤ºæ„图)](#15102-jdk18-ä¸Šé¢æœ‰ç¤ºæ„图) - - [1.6. Collections 工具类](#16-collections-工具类) - - [1.6.1. æŽ’åºæ“作](#161-æŽ’åºæ“作) - - [1.6.2. 查找,æ›¿æ¢æ“作](#162-æŸ¥æ‰¾æ›¿æ¢æ“作) - - [1.6.3. åŒæ­¥æŽ§åˆ¶](#163-åŒæ­¥æŽ§åˆ¶) - - - # 1. 剖æžé¢è¯•最常è§é—®é¢˜ä¹‹ Java é›†åˆæ¡†æž¶ ## 1.1. é›†åˆæ¦‚è¿° @@ -309,11 +258,9 @@ Output: ### 1.3.3. 比较 HashSetã€LinkedHashSet å’Œ TreeSet ä¸‰è€…çš„å¼‚åŒ -`HashSet` 是 `Set` 接å£çš„主è¦å®žçŽ°ç±» ,`HashSet` 的底层是 `HashMap`,线程ä¸å®‰å…¨çš„,å¯ä»¥å­˜å‚¨ null 值; - -`LinkedHashSet` 是 `HashSet` çš„å­ç±»ï¼Œèƒ½å¤ŸæŒ‰ç…§æ·»åŠ çš„é¡ºåºé历; - -`TreeSet` 底层使用红黑树,元素是有åºçš„,排åºçš„æ–¹å¼æœ‰è‡ªç„¶æŽ’åºå’Œå®šåˆ¶æŽ’åºã€‚ +- `HashSet`ã€`LinkedHashSet` å’Œ `TreeSet` 都是 `Set` 接å£çš„实现类,都能ä¿è¯å…ƒç´ å”¯ä¸€ï¼Œå¹¶ä¸”éƒ½ä¸æ˜¯çº¿ç¨‹å®‰å…¨çš„。 +- `HashSet`ã€`LinkedHashSet` å’Œ `TreeSet` 的主è¦åŒºåˆ«åœ¨äºŽåº•层数æ®ç»“æž„ä¸åŒã€‚`HashSet` 的底层数æ®ç»“构是哈希表(基于 `HashMap` 实现)。`LinkedHashSet` 的底层数æ®ç»“构是链表和哈希表,元素的æ’入和å–å‡ºé¡ºåºæ»¡è¶³ FIFO。`TreeSet` 底层数æ®ç»“构是红黑树,元素是有åºçš„,排åºçš„æ–¹å¼æœ‰è‡ªç„¶æŽ’åºå’Œå®šåˆ¶æŽ’åºã€‚ +- 底层数æ®ç»“æž„ä¸åŒåˆå¯¼è‡´è¿™ä¸‰è€…的应用场景ä¸åŒã€‚`HashSet` 用于ä¸éœ€è¦ä¿è¯å…ƒç´ æ’入和å–出顺åºçš„场景,`LinkHashSet` 用于ä¿è¯å…ƒç´ çš„æ’å…¥å’Œå–å‡ºé¡ºåºæ»¡è¶³ FIFO 的场景,`TreeSet` 用于支æŒå¯¹å…ƒç´ è‡ªå®šä¹‰æŽ’åºè§„则的场景。 ## 1.4 Collection 孿ޥå£ä¹‹ Queue