Skip to content

Commit 23efacc

Browse files
committed
Update java集合框架基础知识&面试题总结.md
1 parent a26ff09 commit 23efacc

File tree

1 file changed

+3
-56
lines changed

1 file changed

+3
-56
lines changed

docs/java/collection/java集合框架基础知识&面试题总结.md

+3-56
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,3 @@
1-
<!-- TOC -->
2-
3-
- [1. 剖析面试最常见问题之 Java 集合框架](#1-剖析面试最常见问题之-java-集合框架)
4-
- [1.1. 集合概述](#11-集合概述)
5-
- [1.1.1. Java 集合概览](#111-java-集合概览)
6-
- [1.1.2. 说说 List, Set, Queue, Map 四者的区别?](#112-说说-list-set-queue-map-四者的区别)
7-
- [1.1.3. 集合框架底层数据结构总结](#113-集合框架底层数据结构总结)
8-
- [1.1.3.1. List](#1131-list)
9-
- [1.1.3.2. Set](#1132-set)
10-
- [1.1.3.3 Queue](#1133-queue)
11-
- [1.1.3.4. Map](#1134-map)
12-
- [1.1.4. 如何选用集合?](#114-如何选用集合)
13-
- [1.1.5. 为什么要使用集合?](#115-为什么要使用集合)
14-
- [1.2. Collection 子接口之 List](#12-collection-子接口之-list)
15-
- [1.2.1. Arraylist 和 Vector 的区别?](#121-arraylist-和-vector-的区别)
16-
- [1.2.2. Arraylist 与 LinkedList 区别?](#122-arraylist-与-linkedlist-区别)
17-
- [1.2.2.1. 补充内容:双向链表和双向循环链表](#1221-补充内容双向链表和双向循环链表)
18-
- [1.2.2.2. 补充内容:RandomAccess 接口](#1222-补充内容randomaccess-接口)
19-
- [1.2.3. 说一说 ArrayList 的扩容机制吧](#123-说一说-arraylist-的扩容机制吧)
20-
- [1.3. Collection 子接口之 Set](#13-collection-子接口之-set)
21-
- [1.3.1. comparable 和 Comparator 的区别](#131-comparable-和-comparator-的区别)
22-
- [1.3.1.1. Comparator 定制排序](#1311-comparator-定制排序)
23-
- [1.3.1.2. 重写 compareTo 方法实现按年龄来排序](#1312-重写-compareto-方法实现按年龄来排序)
24-
- [1.3.2. 无序性和不可重复性的含义是什么](#132-无序性和不可重复性的含义是什么)
25-
- [1.3.3. 比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同](#133-比较-hashsetlinkedhashset-和-treeset-三者的异同)
26-
- [1.4 Collection 子接口之 Queue](#14-collection-子接口之-queue)
27-
- [1.4.1 Queue 与 Deque 的区别](#141-queue-与-deque-的区别)
28-
- [1.4.2 ArrayDeque 与 LinkedList 的区别](#142-arraydeque-与-linkedlist-的区别)
29-
- [1.4.3 说一说 PriorityQueue](#143-说一说-priorityqueue)
30-
- [1.5. Map 接口](#15-map-接口)
31-
- [1.5.1. HashMap 和 Hashtable 的区别](#151-hashmap-和-hashtable-的区别)
32-
- [1.5.2. HashMap 和 HashSet 区别](#152-hashmap-和-hashset-区别)
33-
- [1.5.3. HashMap 和 TreeMap 区别](#153-hashmap-和-treemap-区别)
34-
- [1.5.4. HashSet 如何检查重复](#154-hashset-如何检查重复)
35-
- [1.5.5. HashMap 的底层实现](#155-hashmap-的底层实现)
36-
- [1.5.5.1. JDK1.8 之前](#1551-jdk18-之前)
37-
- [1.5.5.2. JDK1.8 之后](#1552-jdk18-之后)
38-
- [1.5.6. HashMap 的长度为什么是 2 的幂次方](#156-hashmap-的长度为什么是-2-的幂次方)
39-
- [1.5.7. HashMap 多线程操作导致死循环问题](#157-hashmap-多线程操作导致死循环问题)
40-
- [1.5.8. HashMap 有哪几种常见的遍历方式?](#158-hashmap-有哪几种常见的遍历方式)
41-
- [1.5.9. ConcurrentHashMap 和 Hashtable 的区别](#159-concurrenthashmap-和-hashtable-的区别)
42-
- [1.5.10. ConcurrentHashMap 线程安全的具体实现方式/底层具体实现](#1510-concurrenthashmap-线程安全的具体实现方式底层具体实现)
43-
- [1.5.10.1. JDK1.7(上面有示意图)](#15101-jdk17上面有示意图)
44-
- [1.5.10.2. JDK1.8 (上面有示意图)](#15102-jdk18-上面有示意图)
45-
- [1.6. Collections 工具类](#16-collections-工具类)
46-
- [1.6.1. 排序操作](#161-排序操作)
47-
- [1.6.2. 查找,替换操作](#162-查找替换操作)
48-
- [1.6.3. 同步控制](#163-同步控制)
49-
50-
<!-- /TOC -->
51-
521
# 1. 剖析面试最常见问题之 Java 集合框架
532

543
## 1.1. 集合概述
@@ -309,11 +258,9 @@ Output:
309258

310259
### 1.3.3. 比较 HashSet、LinkedHashSet 和 TreeSet 三者的异同
311260

312-
`HashSet``Set` 接口的主要实现类 ,`HashSet` 的底层是 `HashMap`,线程不安全的,可以存储 null 值;
313-
314-
`LinkedHashSet``HashSet` 的子类,能够按照添加的顺序遍历;
315-
316-
`TreeSet` 底层使用红黑树,元素是有序的,排序的方式有自然排序和定制排序。
261+
- `HashSet``LinkedHashSet``TreeSet` 都是 `Set` 接口的实现类,都能保证元素唯一,并且都不是线程安全的。
262+
- `HashSet``LinkedHashSet``TreeSet` 的主要区别在于底层数据结构不同。`HashSet` 的底层数据结构是哈希表(基于 `HashMap` 实现)。`LinkedHashSet` 的底层数据结构是链表和哈希表,元素的插入和取出顺序满足 FIFO。`TreeSet` 底层数据结构是红黑树,元素是有序的,排序的方式有自然排序和定制排序。
263+
- 底层数据结构不同又导致这三者的应用场景不同。`HashSet` 用于不需要保证元素插入和取出顺序的场景,`LinkHashSet` 用于保证元素的插入和取出顺序满足 FIFO 的场景,`TreeSet` 用于支持对元素自定义排序规则的场景。
317264

318265
## 1.4 Collection 子接口之 Queue
319266

0 commit comments

Comments
 (0)