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" :有序(插入顺序)
    LinkedHashSetLinkedHashMap

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

  • 纯"Hash" :无序
    HashSetHashMap

  • 带"List" :有序+可重复
    ArrayListLinkedList

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<String> list = new ArrayList<>();
    Set<String> set = new LinkedHashSet<>(list); // 保留顺序去重

四、总结图示

mermaid

java 复制代码
pie
    title 集合特性占比
    "有序+可重复" : 3 (ArrayList/LinkedList/ArrayDeque)
    "有序+不可重复" : 3 (LinkedHashSet/TreeSet/LinkedHashMap/TreeMap)
    "无序+不可重复" : 2 (HashSet/HashMap)

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

相关推荐
惊讶的猫15 分钟前
意图识别置信度和检索重排的分数
java
2601_9669496532 分钟前
只拿到股票代码还不够:量化程序到底还需要哪些标的信息?——从数据建模开始理解股票元数据
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
caoerzhong37 分钟前
仓库管理数字化趋势解读:JeeWMS 开源 Java WMS 视角下的五个演进方向
java·开源
m0_7345717643 分钟前
深入理解5g <十八>传输块tbsize的计算
开发语言·5g
程序员JerrySUN1 小时前
Jetson Edge AI 实战01:Nano、Xavier、Orin 怎么选?Jetson 硬件选型详解【视频讲解】
java·数据库·redis·安全·mybatis
Joy T2 小时前
Spring AI 2.0 Agent 进阶:Memory、State 与 Context Engineering 常见技术全景
java·人工智能·后端·spring·agent入门·agent state
估值探索者2 小时前
【Python量化系统工程化 #08】关了 SSH 就停?systemd 让脚本开机自启 + 异常自动拉起
java·c++·人工智能·分类·数据挖掘
RAN11426760082 小时前
1.3第一个程序的介绍
开发语言·qt
天若有情6732 小时前
C++花式魔改!手写头文件复刻Java语法,彻底打破编码思维定式
java·c++·语言做语言·jac++
blue_ice .3 小时前
Verilog DDS 数字信号发生器:DAC 输出模拟波形与 ADC 回采观测
开发语言·单片机·嵌入式硬件·fpga开发