当前位置: 首页 > news >正文

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

// HashSet的add方法源码
public boolean add(E e) {
    return map.put(e, PRESENT) == null; // 用HashMap的key去重
}

3. 如何让List去重?

  • 转换为Set:

    java

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


四、总结图示

mermaid

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

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

http://www.dtcms.com/a/119881.html

相关文章:

  • TreeMap 核心知识点与面试题解析
  • Docker 核心组件
  • 【教学类-102-03】自制剪纸图案(留白边、沿线剪)03——Python制作白色描边和黑点虚线间隔(透明png图片)
  • 【Introduction to Reinforcement Learning】翻译解读4
  • KWDB创作者计划—边缘计算:从概念到落地的技术解读
  • 荣耀90 GT信息
  • 【微机及接口技术】- 第八章 可编程并行接口
  • 软考中级-软件设计师 2023年上半年下午题真题解析:通关秘籍+避坑指南
  • R语言进行聚类分析
  • JBDC java数据库连接(2)
  • System V 信号量:控制进程间共享资源的访问
  • WPS JS宏编程教程(从基础到进阶)-- 第五部分:JS数组与WPS结合应用
  • 4.8学习总结 贪心算法+Stream流
  • 获取cookie的chrome插件:Get cookies.txt LOCALLY
  • 前端知识点---闭包(javascript)
  • 【设计模式】创建型 -- 单例模式 (c++实现)
  • 最小K个数
  • ecovadis认证基本概述,ecovadis认证审核有效期
  • spring mvc 在拦截器、控制器和视图中获取和使用国际化区域信息的完整示例
  • 【零基础入门unity游戏开发——动画篇】新动画Animator的使用 —— AnimatorController和Animator的使用
  • 【杂谈】-小型推理模型:人工智能领域的新兴力量
  • Day2_Python tornado库2_post方法_上传图片文件
  • NumPy依赖库BLAS和LAPACK详细信息解析
  • UE5今日所学创建海洋+命名规范
  • 同时支持Vue2/Vue3的图片懒加载组件(支持懒加载 v-html 指令梆定的 html 内容)
  • 【Java面试系列】Spring Cloud微服务架构中的分布式事务实现与Seata框架深度解析详解 - 3-5年Java开发必备知识
  • .htaccess文件的组成、用法及作用详解
  • debian12 mysql完全卸载
  • Android 文件选择器
  • 如何在 Apifox 中与其他成员共用数据库连接配置