news 2026/6/25 10:34:32

java学习日志--集合(Map篇)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java学习日志--集合(Map篇)

一、Map概述

在Collection篇中,我们总结了List和Set的一些实现类,以及对应的底层实现。Map和它们有些不一样的地方,它是存储键值对的容器,键就像List的下标,可以通过键找到对应的值。Map中key不能重复。

1.1 Map规定的一些方法

作为键值对容器,Map规定了一些键值对的一些方法:

//获取键值对的个数 int size() //添加键值对/修改key对应的值。如果是添加,返回nu,如果是修改,返回原来的value值 V put(K key, V value) //将指定Map中的键值对添加到当前Map中,如果有重名的key,会修改value的值 void putAll(Map<? extends K,?extends V>m) //根据key删除键值对,返回值是被删除的键值对的value V remove(Object key) //根据key获取对应的value V get(Object key) //获取Map中所有的key Set<K> keySet() //获取Map中所有的value Collection<V> values() //获取全部的键值对 Set<Map.Entry<K,V>>entrySet() //Map中是否包含指定的key boolean containsKey(Objectkey) //Map中是否包含指定的value boolean containsValue(Objectvalue) //清空全部键值对 void clear()

二、Map的实现类

Map接口的实现类:主要包含HashMap、LinkedHashMap、TreeMap。

HashMap:是最普通的Map实现类,键值对的顺序是无序的。------学习的时候类比HashSet

LinkedHashMap:键值对的顺序和存入时的顺序一致。-------学习的时候类比LinkedHashSet

TreeMap:key的内容有序的键值对集合。-------学习的时候类比TreeSet

2.1 HashMap实现类

HashMap和HashSet一样,底层都是哈希表结构,不一样的是Map是键值对结构,具体的哈希表的描述我在Collection篇的HashSet中有过描述,在这里就不再赘述,需要的可以点击跳转。

2.1.1 构造方法

构造方法是可以用来在创建对象时直接来为属性赋值的。

//构造一个空的HashMap,默认初始容量16,加载因子0.75 HashMap() //构造一个空的HashMap,具有指定的初始容量,加载因子0.75 HashMap(int initialCapacity) //构造一个空的HashMap,具有指定的初始容量和加载因子 HashMap(int initialCapacity, floatloadFactor) //构造一个HashMap,包含指定Map中的键值对 HashMap(Map<?extends K,? extendsV> m)

2.1.2 常用方法

1)增

有一点不太一样的是,put()方法可以用来添加,也可以用来修改,如果原来没有数据就是添加,反之就是修改。

//添加键值对 或 修改key对应的值。如果是添加,返回null,如果是修改,返回原来的value值 V put(K key, V value) //将指定Map中的键值对添加到当前Map中,如果有重名的key,会修改value的值 void putAll(Map<? extends K, ? extends V> m)

2)删

//删除指定key对应的键值对 V remove(Object key) //仅当key和value都对的时候,删除键值对 boolean remove(Object key, Object value) //清空元素 void clear()

3)改

//添加键值对 或 修改key对应的值。如果是添加,返回null,如果是修改,返回原来的value值 V put(K key, V value) //修改键值对,只有当key存在的时候,才修改,否则不修改 V replace(K key, V valie)

4)查

//获取key对应的value V get(Object key) //获取key对应的值,如果没有key,获取默认值 V getOrDefault(Object key, V defaultValue) //获取所有的key Set<K> keySet() //获取所有的value Collection<V> values() //获取所有的键值 Set<Map.Entry<K,V>> entrySet() //是否包含指定的key boolean containsKey(Object key) //是否包含指定的value boolean containsValue(Object value) // 获取键值对的个数 int size()

2.1.3 遍历方法

1)先获取Map中所有的key,再根据key获取value:

//遍历方法一:先获取所有的key,根据key获取value Set<String> keySet = map1.keySet(); for(String key : keySet) { String value = map1.get(key); System.out.println("key:" + key + ",value:" + value); }

2)先调用entryset()方法返回所有的键值对,获取之后使用Set接收,再获取key和value。

//遍历方法二:先获取所有键值对,从键值对里取key和value Set<Map.Entry<String, String>> entrySet = map1.entrySet(); for(Map.Entry<String, String> entry : entrySet) { String key = entry.getKey(); String value = entry.getValue(); System.out.println("key:" + key + " ==== value:" + value); }

3)先获取所有key,再使用迭代器获取key,之后用迭代器的遍历方式通过key获取value

//遍历方法三:获取Key的迭代器,通过迭代器获取key,通过key获取value Set<String> keySet = map1.keySet(); Iterator<String> it = keySet.iterator(); while(it.hasNext()) { String key = it.next(); String value = map1.get(key); System.out.println("key:" + key + ", value:" + value); }

4)先获取所有的键值对对象,再通过迭代器获取键值对对象,用迭代器的遍历方式获取key和value

//遍历方法四:获取键值对迭代器,通过迭代器获取键值对,通过键值对对象获取key和value Set<Map.Entry<String, String>> entrySet = map1.entrySet(); Iterator<Map.Entry<String, String>> it = entrySet.iterator(); while(it.hasNext()) { Map.Entry<String, String> entry = it.next(); String key = entry.getKey(); String value = entry.getValue(); System.out.println("key:" + key + ", value:" + value); }

2.2 LinkedHashMap实现类

LinkedHashMap是HashMap的子类,它具有和HashSet同样的功能,元素也是不能重复,唯一不同的是,LinkedHashMap会维持元素加入的顺序。LinkedHashMap和LinkedHashMap一样,底层数据结构是双向链表+哈希表。

2.2.1 构造方法

//创建一个空的LinkedHashMap,初始容量16,加载因子0.75,Map元素顺序使用插入顺序 LinkedHashMap() //创建一个空的LinkedHashMap,初始容量为指定值,加载因子0.75,Map元素顺序使用插入顺序 LinkedHashMap(intcapacity) //创建一个空的LinkedHashMap,初始容量和加载因子为指定值,Map元素顺序使用插入顺序 LinkedHashMap(int capacity, float loadFactor) /*创建一个空的LinkedHashMap,初始容量和加载因子为指定值,accessOrder为true时,Map元素顺序使用插入 顺序 */ LinkedHashMap(int capacity, float loadFactor,boolean accessOrder) //创建一个包含指定键值对的LinkedHashMap,Map元素顺序使用插入顺序 LinkedHashMap(Map<? extends K, ? extends V> m)

2.2.2 常用方法

因为LinkedHashMap是HashMap的子类,所以常用方法的总结和HashMap相同,详见2.1.2,在此就不过多赘述。

2.2.3 遍历方法

Map的遍List比起来也就多了同时获取键值对的遍历方式,也同时又因为Map也是无序的,所以没有普通for循环的遍历,所以遍历方法的总结和HashMap相同,详见2.1.3,在此就不过多赘述。

2.3 TreeMap实现类

TreeSet使用的是树加键值对存储元素。

2.3.1 构造方法

//创建一个空的TreeMap,使用自然顺序对key排序 TreeMap() //创建一个空的TreeMap,使用指定的比较器对key进行排序 TreeMap(Comparator<? super K> c) //创建一个包含指定键值对的TreeMap,使用自然顺序对key排序 TreeMap(Map<? extends K, ? extends V> m) //创建一个包含指定键值对的TreeMap,使用与相同的排序规则 TreeMap(SortedMap<K, ? extends V > m)

2.3.2 常用方法

常用方法的总结和HashMap相同,详见2.1.2,在此就不过多赘述。

2.3.3 遍历方法

Map的遍List比起来也就多了同时获取键值对的遍历方式,也同时又因为Map也是无序的,所以没有普通for循环的遍历,所以遍历方法的总结和HashMap相同,详见2.1.3,在此就不过多赘述。

2.4 Hashtable实现类

Hashtable是Map的实现类,它也是键值对容器,用法和HashMap一样,主要的区别是:
1)Hashtable在多线程访问时,是安全的。HashMap是不安全的
2)Hashtable继承于Dictionary,HashMap继承于AbstractMap
3)Hashtable键和值都不能为null,HashMap的键和值都可以为null,但只能有一个key为null

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 2:42:09

鸣潮自动化助手:告别重复操作的终极解决方案

鸣潮自动化助手&#xff1a;告别重复操作的终极解决方案 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸上锁合成 自动肉鸽 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 还在为每日繁琐的…

作者头像 李华
网站建设 2026/6/24 6:55:01

3、掌握GIMP基础工具,开启创意图像之旅

掌握GIMP基础工具,开启创意图像之旅 在使用GIMP一段时间后,你应该已经对其界面有了一定的熟悉度,能够自如地打开和保存各种格式的图像。现在,是时候深入了解GIMP的基本工具了,这些工具是创建和编辑图像的基础,掌握它们将让你在图像处理的道路上更进一步。 1. 基础工具概…

作者头像 李华
网站建设 2026/6/23 11:21:43

4、图形编辑:画笔、图案与选区的深度应用

图形编辑:画笔、图案与选区的深度应用 1. 画笔的深入使用 1.1 画笔设置 在图形编辑中,画笔是常用工具。通过“File - Dialogs - Brushes”可打开画笔选择窗口。这里有各种预设画笔,大小和形状各异,从微小圆形到纹理画笔,甚至有由图像制成的画笔。选择画笔时,右侧会显示…

作者头像 李华
网站建设 2026/6/23 19:14:35

5、图像编辑与色彩处理全攻略

图像编辑与色彩处理全攻略 1. 图像变换工具 在图像编辑中,变换工具是实现各种效果的关键。以下是几种常见的变换工具及其使用方法: - 移动工具 : - 移动整个图像:激活移动工具后,它就像一个小抓手,按住鼠标左键拖动图像,即可将其移动到新位置。 - 移动图像中的选…

作者头像 李华
网站建设 2026/6/23 18:46:42

9、探索GIMP滤镜:从图像优化到艺术创作

探索GIMP滤镜:从图像优化到艺术创作 1. 滤镜基础 在GIMP中,滤镜是一项强大且实用的功能。它不仅能增强图像效果,还能创造出各种令人惊叹的特殊效果。使用滤镜可以节省大量手动操作的时间,尤其是在频繁使用某些图像时。 1.1 滤镜的定义 滤镜本质上属于GIMP中的插件。插件…

作者头像 李华
网站建设 2026/6/23 18:49:16

11、照片合成与修复增强全攻略

照片合成与修复增强全攻略 1. 照片合成 1.1 合成的定义 合成就是将多个独立的部分或元素组合在一起。在照片和图形图像领域,合成指的是将两张或更多的图像合并为一张。常见的合成方法有利用图层、不透明度、混合模式、蒙版和渐变等,还可以使用选择工具选取部分图像进行组合…

作者头像 李华