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

Java数据结构:Map与Set

一、Map与Set核心

1.1 Set 集合

- 继承自Collection,存储单个唯一元素
- 核心特性:无序、无下标、元素不可重复
- 本质:底层基于Map实现,只使用Key做去重
- 适用:去重、判重、唯一ID存储

1.2 Map 映射

- 独立接口,不继承Collection,存储Key-Value键值对
- 核心特性:Key唯一、Value可重复,通过Key快速查Value
- 适用:映射关系、缓存、配置、字典、统计计数

一区别

- Set管唯一,只存单个值,用来去重
- Map管映射,存键值对,用来快速查找



二、Set 常用实现类与底层原理

2.1 HashSet

- 底层:HashMap,哈希表结构
- 特点:无序、高效增删查、允许null
- 线程不安全
- 去重依赖:hashCode() + equals()

2.2 LinkedHashSet

- 底层:LinkedHashMap,哈希表+双向链表
- 特点:保留插入顺序,性能略低于HashSet

2.3 TreeSet

- 底层:TreeMap,红黑树
- 特点:自动排序(自然序/比较器)
- 元素必须实现Comparable或传入Comparator

Set 基础代码示例



Set<String> set = new HashSet<>();
set.add("Java");
set.add("Python");
set.add("Java"); // 重复,自动忽略
System.out.println(set.contains("Java")); // true
set.remove("Python");
// 遍历
for (String s : set) {
System.out.println(s);
}




三、Map 常用实现类与底层原理

3.1 HashMap

- 底层:JDK1.8+ 数组+链表+红黑树
- 特点:Key唯一、无序、高效、允许1个nullKey、多个nullValue
- 线程不安全,并发推荐ConcurrentHashMap

3.2 LinkedHashMap

- 底层:HashMap+双向链表
- 特点:保持插入顺序/访问顺序,适合缓存LRU场景

3.3 TreeMap

- 底层:红黑树
- 特点:Key自动排序,支持范围查找

3.4 Hashtable

- 线程安全,方法全synchronized,性能低,已淘汰

Map 基础代码示例



Map<String, Integer> map = new HashMap<>();
map.put("张三", 95);
map.put("李四", 88);
map.put("张三", 100); // 覆盖旧值
// 获取
System.out.println(map.get("张三")); // 100
// 判断
System.out.println(map.containsKey("李四")); // true




四、Map 四种遍历方式(面试高频)



// 1. keySet遍历(先取Key再取Value)
for (String key : map.keySet()) {
System.out.println(key + ":" + map.get(key));
}

// 2. entrySet遍历(推荐,效率最高)
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}

// 3. Iterator迭代器
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<String, Integer> entry = iterator.next();
}

// 4. forEach(JDK8+)
map.forEach((k, v) -> System.out.println(k + ":" + v));




五、去重与排序核心机制

5.1 唯一性保证

- Set:依赖元素hashCode()与equals()
- Map:Key依赖hashCode()与equals()
- 自定义对象必须重写这两个方法,否则去重失效

5.2 排序机制

- TreeSet/TreeMap:自然排序(Comparable)或比较器排序(Comparator)
- LinkedHashSet/LinkedHashMap:保持插入顺序



六、时间复杂度对比

集合 查找 插入 删除 底层
HashSet/HashMap O(1) O(1) O(1) 哈希表
TreeSet/TreeMap O(logN) O(logN) O(logN) 红黑树



七、使用场景选择

选Set

- 列表去重
- 判断元素是否存在
- 存储唯一标识(UUID、手机号、IP)
- 交集/并集/差集运算

选Map

- ID关联对象(用户ID→User)
- 统计词频、计数
- 缓存、配置项
- 字典映射(中英互译)





总结

- Set = 去重工具,底层靠Map,查存在最快
- Map = 映射工具,Key唯一,按Key检索O(1)
- 无序选Hash系列,有序选Linked系列,排序选Tree系列
- 日常开发优先HashMap/HashSet,并发用ConcurrentHashMap

本文覆盖Java Map与Set的核心知识点,代码可直接复制运行,适合学习笔记与面试复习。

需要我帮你补充自定义对象存入Set/Map重写hashCode和equals的完整示例吗?

http://www.jsqmd.com/news/564063/

相关文章:

  • 数据中心布线必看:QSFP28光模块的5大优势及与CFP2的实战对比
  • HTML 列表及其外观设置
  • 3步打造电商评论数据洞察:用last30days-skill实现可视化分析
  • XGBoost模型训练超快
  • 2026年比较好的试剂级乙酸乙酯/乙酸乙酯公司推荐 - 行业平台推荐
  • 2026年评价高的水处理剂聚合硫酸铁/工业废水处理剂聚合硫酸铁/山东水处理剂聚合硫酸铁公司推荐 - 行业平台推荐
  • 57:L构建紫队协同:蓝队的协同防御
  • 零基础部署Speech Seaco Paraformer:WebUI界面一键识别中文语音
  • Pixel Fashion Atelier部署实操:Docker镜像免配置环境搭建详细步骤
  • 快速测量平差概算改正计算工具
  • 2026年热门的湖北医药中间体醋酸乙酯/湖北涂料用醋酸乙酯/油墨稀释剂醋酸乙酯/食品级醋酸乙酯销售厂家推荐 - 行业平台推荐
  • PDF-Extract-Kit-1.0保姆级部署教程:4090D单卡一键启动Jupyter实战
  • teler IDS v3前瞻:eBPF技术与teler-waf集成带来的革命性变革
  • Jimeng LoRA轻量测试系统:开箱即用,快速体验不同LoRA模型效果
  • CosyVoice2-0.5B开源镜像免配置:Gradio WebUI一键部署详细步骤
  • 别再死记硬背公式了!用Python+SymPy手把手推导方波傅里叶级数(附代码)
  • 2026年国内冰裂釉陶土板施工推荐,陶棍/陶砖/陶板/陶百叶/陶土板,陶土板施工工艺地址 - 品牌推荐师
  • Graphormer惊艳效果:可视化分子图注意力热力图识别催化活性中心原子
  • 【WNC】R1220 参数
  • 【计算机网络工程论文】基于三层交换的局域网设计:连平中学教学楼VLAN划分与eNSP仿真应用
  • GLM-4V-9B开源大模型教程:4-bit量化加载+Streamlit封装,中小企业AI落地首选
  • 智能文本分析实战指南:基于BERTopic的技术原理与落地实践
  • Phi-4-mini-reasoning基础教程:输入题目→直出答案的极简推理流程
  • 2026年质量好的浙江化学脱塑/铝合金脱塑实力厂家推荐 - 行业平台推荐
  • (蓝桥杯 2015 国)穿越雷区 (模拟 + bfs)
  • cas:1644644-96-1,甲基四嗪-琥珀酰亚胺酯,Methyltetrazine-NHS ester的应用
  • DanKoe 视频笔记:生产力提升:如何每天为目标专注12小时 [特殊字符]
  • 2026年评价高的山东水处理剂聚合氯化铝/污水处理聚合氯化铝/山东污水处理聚合氯化铝/山东聚合氯化铝源头厂家推荐 - 行业平台推荐
  • 技术文章大纲:IT疑难杂症诊疗室
  • Phi-4-mini-reasoning企业落地案例:集成至内部知识库的逻辑问答模块