Java 集合有序性与重复性总结及记忆技巧

Java 集合有序性与重复性总结及记忆技巧

一、集合分类速查表

集合类型

是否有序

是否允许重复

记忆口诀

ArrayList

✅ 有序(插入顺序)

✅ 可重复

"数组列表,顺序记牢"

LinkedList

✅ 有序(插入顺序)

✅ 可重复

"链表结构,先来后到"

HashSet

❌ 无序(插入时没有顺序)

❌ 不可重复

"哈希散列,乱序唯一"

LinkedHashSet

✅ 有序(插入顺序)

❌ 不可重复

"链表哈希,有序唯一"

TreeSet

✅ 有序(自然/定制排序)

❌ 不可重复

"树形排序,规则唯一"

HashMap

❌ 无序

Key不可重复

"哈希大哥,乱序当家"

LinkedHashMap

✅ 有序(插入/访问顺序)

Key不可重复

"链表哈希,顺序钥匙"

TreeMap

✅ 有序(Key排序)

Key不可重复

"树形钥匙,排队进门"

ArrayDeque

✅ 有序(队列/栈顺序)

✅ 可重复

"双端队列,先进先出"

二、记忆方法大全

1. 按数据结构记忆

数组/链表结构 (ArrayList/LinkedList/ArrayDeque):

→ 有序 + 可重复(像排队,先来后到,可以有人同名)

哈希表结构 (HashSet/HashMap):

→ 无序 + 不可重复(像丢进桶里的球,乱序且唯一)

链表+哈希组合 (LinkedHashSet/LinkedHashMap):

→ 有序 + 不可重复(用链表记录顺序,但内容唯一)

树形结构 (TreeSet/TreeMap):

→ 排序 + 不可重复(像字典,按字母排序且单词唯一)

2. 命名规律记忆

带"Linked" :有序(插入顺序)

LinkedHashSet、LinkedHashMap

带"Tree" :排序(自然/定制顺序)

TreeSet、TreeMap

纯"Hash" :无序

HashSet、HashMap

带"List" :有序+可重复

ArrayList、LinkedList

3. 生活场景联想

ArrayList → 班级点名册

(按学号顺序记录,允许同名同姓)

HashSet → 抽奖箱

(名字丢进去乱序混合,但每人只能中奖一次)

TreeSet → 字典目录

(按字母排序,每个单词唯一)

LinkedHashMap → 餐厅排队系统

(按排队顺序叫号,但每个号码唯一)

三、面试高频问题

1. 如何选择集合?

需要快速访问 且不关心顺序? → HashMap/HashSet

需要保持插入顺序 ? → LinkedHashMap/LinkedHashSet

需要自动排序 ? → TreeMap/TreeSet

需要允许重复 ? → ArrayList/LinkedList

2. 为什么Set不允许重复?

底层用Map实现(如HashSet用HashMap),重复元素会被覆盖:

java

java

复制代码

// HashSet的add方法源码

public boolean add(E e) {

return map.put(e, PRESENT) == null; // 用HashMap的key去重

}

3. 如何让List去重?

转换为Set:

java

java

复制代码

List list = new ArrayList<>();

Set set = new LinkedHashSet<>(list); // 保留顺序去重

四、总结图示

mermaid

java

复制代码

pie

title 集合特性占比

"有序+可重复" : 3 (ArrayList/LinkedList/ArrayDeque)

"有序+不可重复" : 3 (LinkedHashSet/TreeSet/LinkedHashMap/TreeMap)

"无序+不可重复" : 2 (HashSet/HashMap)

一句话总结 :

"数组链表可重复,哈希乱序需唯一,带Link保顺序,带Tree会排序"

安装电脑收银机收银系统有哪几个步骤?哪个收银系统牌子好
dota2阵营,dota2阵容搭配详解