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

List、Set、Map 集合知识点

List:有序可重复,有索引 ArrayList、LinkedList、Vector

Set:无序不可重复,无索引 HashSet、LinkedHashSet、TreeSet

Map:键值对<K,V>,键唯一,值可重复 HashMap、LinkedHashMap、TreeMap ConcurrentHashMap、Hashtable

一、List 系列(有序、可重复、带下标)

1. ArrayList

  1. 底层:Object [] 动态数组,默认容量 10
  2. 扩容:原容量 1.5 倍old + old>>1
  3. 特点:
    • 查询快(下标随机访问 O (1))、增删末尾快、中间插入删除慢(数组移位)
    • 线程不安全,多线程并发添加会数组越界、数据丢失
    • 允许 null 元素
  4. 适用:大量查询、少量增删

2. LinkedList

  1. 底层双向链表 Node,无扩容,按需创建节点
  2. 特点:
    • 随机查询慢 O (n)、首尾增删快 O (1),中间增删慢
    • 实现 Deque,可做队列、栈
    • 线程不安全
  3. 适用:频繁头尾增删

3. Vector(淘汰)

  • 底层数组,扩容 2 倍,所有方法加 synchronized,线程安全,效率极低,基本不用。

List 通用考点

  1. Arrays.asList()返回固定长度集合,不能 add/remove
  2. 遍历:for 下标遍历、增强 for、Iterator;遍历中用集合 add/remove 会并发修改异常ConcurrentModificationException,要用迭代器自身 remove
  3. 排序:Collections.sort(),自定义对象重写 Comparable 或传 Comparator

二、Set 系列(不可重复,无索引)

1. HashSet

  1. 底层 HashMap,元素作为 key,value 是静态 Object 占位
  2. 去重规则:hashCode()→equals()
    • hash 不同:直接存;hash 相同,equals 不同→链表 / 红黑树;equals 相同→重复丢弃
  3. 无序、只允许一个 null、线程不安全
  4. 自定义实体存入必须重写hashCode+equals,否则无法去重

坑:存入后修改对象属性→hash 变,remove 删不掉,数据遗留

2. LinkedHashSet

  • 继承 HashSet,底层 LinkedHashMap
  • 插入有序 + 去重,链表维护插入顺序,性能略低于 HashSet

3. TreeSet

  • 底层 TreeMap(红黑树),自动排序 + 去重,不能存 null
  • 不靠 hashCode/equals,靠比较器:
    1. 自然排序:元素实现Comparable
    2. 构造传入Comparator定制排序(优先级更高)
  • compare 返回 0 = 判定元素重复;增删查 O (logn)

Set 选型

  • 只去重无序:HashSet
  • 去重 + 插入有序:LinkedHashSet
  • 去重 + 自动排序:TreeSet

三、Map 系列(键 K 唯一,值 V 可重复,键值对存储)

1. HashMap(重中之重 JDK7 vs JDK8)

JDK1.7:数组 + 单向链表

  • 默认容量 16,负载因子 0.75,扩容 2 倍
  • 头插法扩容,并发扩容链表死循环,线程不安全

JDK1.8:数组 + 链表 + 红黑树

  1. 链表长度>8 转红黑树;树节点<6 退回链表
  2. 尾插法,解决死链问题
  3. hash=(key.hashCode() ^ (hash>>>16)) & (len-1)扰动算法减少哈希碰撞
  4. key 可为 null(null 固定存在下标 0),value 任意 null
  5. 负载因子 0.75:平衡空间与查询效率

常用方法

put()、get()、remove()、containsKey()、putIfAbsent()遍历三种:keySet、entrySet、values

2. LinkedHashMap

  • HashMap + 双向链表,插入有序,可开启 LRU 最近最少淘汰(重写 removeEldestEntry)

3. TreeMap

  • 红黑树,key 自动排序,key 必须实现 Comparable 或构造传 Comparator,key 不能 null

4. Hashtable(过时)

  • 方法全synchronized,锁整张表,效率差;key、value 都不能 null

5. ConcurrentHashMap(线程安全 Map)

JDK7:Segment 分段锁

  • Segment 数组 (默认 16 段),每段继承 ReentrantLock,分段上锁,并发度 16

JDK8:CAS + synchronized 锁桶头

  1. 空桶 CAS 插入;已有数据锁住当前桶首 Node,锁桶不锁整张表
  2. get 无锁,依靠 volatile 保证可见性
  3. sizeCtl 控制初始化、扩容;多线程协助扩容 transfer
  4. putIfAbsent/computeIfAbsent原子方法,替代 if+put 非原子代码

Map 选型

  • 单线程无序:HashMap
  • 单线程插入有序:LinkedHashMap
  • 需要 key 排序:TreeMap
  • 多线程安全:ConcurrentHashMap

四、List/Set/Map 对比总结

集合重复性有序性底层线程安全
List可重复索引有序数组 / 链表不安全 (除 Vector)
HashSet不可重复无序HashMap不安全
LinkedHashSet不可重复插入有序LinkedHashMap不安全
TreeSet不可重复排序有序TreeMap不安全
HashMapK 唯一 V 随意无序数组 + 链表 + 红黑树不安全
ConcurrentHashMapK 唯一 V 随意无序数组 + 链表 + 红黑树安全
http://www.jsqmd.com/news/963839/

相关文章:

  • CSDN AI数字营销卡片跳转能力封测内幕(仅限头部客户开放):小程序跳转灰度通道已开启,速抢首批接入名额
  • Beyond Compare 5授权密钥生成终极指南:三步实现完整激活与高效使用
  • Qoder Background — 为 Qoder IDE 打造的专属背景图插件
  • Unity LeapMotion SDK避坑指南:从零搭建手势交互UI(含完整配置流程)
  • 2026合肥黄金回行情对比解析,权威龙头测评 - 奢侈品回收评测
  • 2026年武汉软考中级试听课怎么申请?直播网课和报考指导 - 众智商学院职业教育
  • CSDN平台AI标题重写机制揭秘:为什么改1个词就能让CTR提升47%、搜索排名前进12位?
  • 实战应用:基于快马AI构建企业级域名灾备与应急升级系统
  • 新号别搞:结构体+联合体+枚举
  • 株洲奢侈品回收哪里靠谱?2026最新实测门店排名,按实力分级推荐 - 生活测评小能手
  • MotorViz
  • 【信息科学与工程学】【物理/化学科学和工程技术】知识体系081 磁学02
  • 分布式共识算法实战:用 Go 从零实现一个带心跳与选举的可调试 Raft 节点模型
  • JavaQuestPlayer:终极跨平台QSP游戏引擎,3分钟打造你的游戏世界
  • 3分钟解锁网易云音乐隐藏功能:BetterNCM安装工具完全指南
  • STM32H743 HAL版SD卡读写工程包:含时钟配置、DMA传输与实测hex文件
  • 2026年 净化空调生产工厂:高效节能/无尘车间/净化中央空调系统,医用级洁净技术与智慧温控有实力的供应商 - 品牌企业推荐师(官方)
  • 华硕笔记本性能控制的革命:G-Helper如何让你告别Armoury Crate的臃肿体验
  • 2026金刚石刀具供应厂家:东莞金刚石V座刀具、车刀、镗刀、铣刀及氮化硼刀具实力品牌深度解析 - 品牌企业推荐师(官方)
  • 丹阳配镜常见问题解答(2026最新专家版) - 资讯速览
  • 2026年地下水位监测设备厂家排行榜与选型指南 - 王工聊地下水监测
  • TTS芯片和语音播放芯片有什么区别?选型前必读
  • Vidupe视频去重工具:三步搞定重复视频的终极解决方案
  • STM32项目实战:IWDG与WWDG到底怎么选?CubeMX配置与HAL库代码对比解析
  • 答疑解惑|Uboot阶段访问某个地址导致系统挂死(DE25-Nano开发板)(地址对齐)
  • 便携式荧光法溶解氧仪优质厂家TOP10 - 仪表品牌排行榜
  • CSDN数字营销ROI计算总出错?根源竟是站外广告跳转被误判为站内点击——4步数据清洗法立即生效
  • 2026丹阳配镜深度测评:如何为你的配镜需求匹配最佳方案? - 资讯速览
  • 谷歌外链怎么做:手把手教你用Ahrefs直接截胡同行的优质外链
  • 2026泰安市权威认证贵金属回收 TOP5+黄金回收白银回收铂金回收门店地址电话推荐