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

有关Java中集合的知识

Java Map 集合完整知识点

一、Map 基础概述

1. 存储结构: java.util.Map<K,V>  是键值对(Key-Value)双列集合, K  键、 V  值,键唯一,值可重复
2. 特点

  • 键(Key):不可重复,一个键只能对应一个值
  • 值(Value):可重复,多个键可以映射同一个值
  • 一个键值对是一个 Entry 对象,Map底层存放 Entry
  • 无序(部分实现类有序),没有索引,不能用普通for循环遍历
    3. 与Collection区别:Collection是单列集合(只存一个元素),Map双列(一对元素)

二、常用实现类对比

实现类 底层结构 键是否允许null 有序性 线程安全 适用场景
HashMap 数组+链表+红黑树 键最多一个null,值任意null 无序 不安全,效率最高 绝大多数日常开发,查询增删快
LinkedHashMap HashMap+双向链表 同HashMap 插入顺序有序 不安全 需要保留存入顺序的场景
TreeMap 红黑树 不允许null键 按键自然排序/自定义排序 不安全 需要对key自动排序
Hashtable 数组+链表 键和值都不允许null 无序 安全,加synchronized 基本淘汰,遗留老代码
Properties 继承Hashtable 键值只能是String 无序 安全 读取配置文件xxx.properties

核心类重点讲解

  1. HashMap(最常用)
  • JDK1.8优化:链表长度>8且数组长度≥64,转为红黑树;红黑树节点<6转回链表
  • 默认初始容量 16 ,负载因子 0.75 :元素个数 > 容量*0.75 自动扩容为2倍
  • 键的自定义类:必须重写hashCode()和equals(),保证相同对象哈希值相等、equals相等
  1. LinkedHashMap

继承HashMap,额外维护双向链表记录插入顺序,遍历顺序=存入顺序
可以构造访问顺序模式(LRU缓存底层)

  1. TreeMap

key必须实现 Comparable 接口,或创建TreeMap时传入 Comparator 比较器
自动按照key升序/自定义规则排序

三、Map 常用API方法

  1. 添加/修改

java

V put(K key, V value)
// 键不存在:新增,返回null;键已存在:覆盖旧值,返回被覆盖的旧值

void putAll(Map<? extends K,? extends V> m) // 批量导入另一个map

  1. 删除

java

V remove(Object key) // 根据键删除,返回被删除的值
boolean remove(Object key, Object value) // 键值匹配才删除
void clear() // 清空所有元素

  1. 查询/判断

java

V get(Object key) // 根据key取值,不存在返回null
V getOrDefault(K key, V defaultValue) // 不存在返回默认值(推荐)

boolean containsKey(Object key) // 是否包含某个键
boolean containsValue(Object value) // 是否包含某个值

int size() // 获取键值对数量
boolean isEmpty() // 判断是否为空

  1. 集合视图(遍历必备)

java

Set keySet() // 获取所有key的Set集合
Collection values() // 获取所有value的集合
Set<Map.Entry<K,V>> entrySet() // 获取所有键值对对象Entry的Set

四、Map 四种遍历方式

java

HashMap<String, Integer> map = new HashMap<>();
map.put("张三", 20);
map.put("李四", 22);

方式1:keySet() 先遍历key,再get取值(常用)

java

Set keys = map.keySet();
for (String key : keys) {
Integer val = map.get(key);
System.out.println(key + "=" + val);
}

方式2:entrySet() 获取键值对(效率最高,大数据优先)

java

Set<Map.Entry<String, Integer>> entries = map.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
String key = entry.getKey();
Integer val = entry.getValue();
}

方式3:forEach Lambda(简洁,JDK8+)

java

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

方式4:迭代器遍历

java

Iterator<Map.Entry<String,Integer>> it = map.entrySet().iterator();
while(it.hasNext()){
Map.Entry<String,Integer> e = it.next();
}

五、JDK8 新增常用方法

1.  computeIfAbsent(key, 函数) :key不存在才计算赋值,存在不改动
2.  computeIfPresent(key, 函数) :key存在才修改value
3.  merge(key, newValue, 合并函数) :不存在就存入,存在则新旧值合并

示例:统计字符串字符出现次数

java

String s = "aabbbcc";
HashMap<Character, Integer> count = new HashMap<>();
for (char c : s.toCharArray()) {
count.merge(c, 1, Integer::sum);
}

六、使用注意事项

1. HashMap键自定义类必须重写hashCode+equals
只重写equals不重写hashCode:两个相等对象哈希值不同,会存成两个键
2. 多线程环境不要用HashMap,并发扩容会死循环、数据丢失
线程安全替代: ConcurrentHashMap (高并发首选,分段锁,性能远优于Hashtable)
3. TreeMap的key不能为null,且必须具备比较规则
4. 尽量使用 getOrDefault 代替get,避免null空指针

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

相关文章:

  • 2026年6月最新版永州正规房屋漏水防水补漏维修口碑名单:创维修缮机构等5家深度测评 - 一休咨询
  • Windows平台AirPlay 2高效实现:专业级跨设备投屏解决方案深度解析
  • 别再死磕EKF了!用ESKF搞定IMU+激光雷达融合,误差状态建模实战避坑
  • 悬架信号处理实战:一阶vs二阶巴特沃斯滤波器,到底怎么选?看完这篇就懂了
  • 托福、雅思、多邻国...12种英语考试怎么选?一张表帮你搞定留学、考研、进外企
  • Python 高手编程系列三千四百三十四:抽象语法树
  • FactoryBluePrints:终极开源工厂蓝图库,3分钟打造高效太空生产线
  • 2026年6月最新版阳泉正规房屋漏水防水补漏维修口碑名单:创维修缮机构等5家深度测评 - 一休咨询
  • CANN数学算子库ops-math深度解读:昇腾NPU上矩阵运算、傅里叶变换与统计算子的硬件加速原理与调用优化
  • 戴森球计划蓝图宝典:3000+工厂设计方案让你效率翻倍
  • Python 高手编程系列四百三十四:抽象语法树
  • 别再被厂商的MTBF数字忽悠了!聊聊硬盘、服务器真实寿命与选购避坑
  • AsrTools:智能语音转文字工具,三步完成音频字幕转换
  • 2026年6月最新版邢台正规房屋漏水防水补漏维修口碑名单:创维修缮机构等5家深度测评 - 一休咨询
  • Minecraft基岩版多版本管理终极指南:解锁无限游戏体验的5个关键技巧
  • 深度解析trackerslist:BitTorrent跟踪服务器架构与技术实现
  • 采购工业测温液位仪表去哪找靠谱厂家看这篇就够了(2026年) - 品牌推荐大师1
  • BongoCat互动桌面宠物:3步掌握Live2D模型自定义开发终极指南
  • 如何3步永久掌控你的微信数据管理:免费开源工具终极指南
  • LeetDown终极指南:3步让老旧iPhone/iPad重获新生
  • 终极防撤回解决方案:PC版微信QQ消息永久保存完全指南
  • 【效率革命】3步实现跨平台Boot Camp驱动自动化部署
  • 深度对比:WPS AI与微软Copilot在办公场景的初体验与未来猜想
  • 2026年北京学员领取众智商学院试听课和资料前怎么确认课程信息 - 众智商学院官方
  • 终极免费资源嗅探:3分钟掌握猫抓Cat-Catch浏览器扩展的完整使用指南
  • 如何快速掌握AsrTools:面向新手的终极语音转文字工具完整指南
  • 2026年6月最新版铜陵正规房屋漏水防水补漏维修口碑名单:创维修缮机构等5家深度测评 - 一休咨询
  • 5分钟快速上手:M3U8视频下载器终极指南
  • 从模块化设计到用户体验:foobox-cn如何重构专业音乐播放器的界面范式
  • C++高并发场景选型指南:除了concurrentqueue,还有哪些无锁队列值得一试?