Java:Map(一)——概述、方法
0、说明
Map是一种Key-Value映射表,作用是通过Key快速查找它的Value。
关于Map,假设有一个map:
Map<String , Student> map = new HashMap<> ();
对它一些基本用法是:
- map.put( Key , Value ):map加入一个Key-Value对;
- Value = map.get( Key ):获得map中的Key对应的Value;如果Key不存在,就返回null。
- boolean containsKey( Key ):查询Key是否存在;
和List类似,Map是一个接口,最常用的实现类是HashMap。
1、模块:java.util.HashMap、java.util.Map
2、方法
Map是一个接口,在使用这些方法时必须先用它来承接一个具体类。
Map<String , Student> map = new HashMap<> ();
2.1、静态方法:用法Map.xxx( ... )
方法返回值 |
方法 |
说明不可修改(Unmodifiable):只读 |
Map<K,V> | copyOf(Map<? extends K,? extends V> map) | 返回某个Map的副本,返回的副本不可修改 |
Map.Entry<K,V> | entry(K k , V v) | 返回一个由指定的K-V对构成的不可修改的Map.Entry |
Map<K,V> | of() | 返回一个空Map |
Map<K,V> | of(K k1 , V v1 , K k2 ,V v2 , ...) | 由给定的一系列K-V构成一个Map |
Map<K,V> | ofEntries(Map.Entry<? extends K,? extends V>... entries) | 返回一个Map.Entry中的K-V构成的不可修改的Map |
2.1、实例方法:用法map.xxx( ... )
方法返回值 |
方法 |
说明 |
void | clear() | 移除Map中的所有K-V |
V | compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) | 对Map中的Key采用某个函数重新计算Value并写入(如果计算不出Value就返回null) |
V |
computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction) |
对Map中所有Value为null的Key采用某个函数重新计算并写入Value值 |
V | computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) | 对Map中所有Value非null的Key采用某个mapping函数重新计算并写入Value值 |
boolean |
containsKey(Object key) containsValue(Object value) |
如果Map中包含指定的Key/Value,就返回true |
Set<Map.Entry<K,V>> | entrySet() | 返回Map中所有K-V构成的Map.Entry的Set(刚方法常用于遍历Map,用法见3.2节) |
boolean | equals(Object o) | 比较当前map和元素o是否相等(具体实现见Map(二)) |
void | forEach(BiConsumer<? super K,? super V> action) |
实现这个方法,就可以用foreach语法遍历Map了 |
V | get(Object key) | 获取Key对应的Value,没有则返回null |
V | getOrDefault(Object key, V defaultValue) | 获取Key对应的Value,没有则返回默认值 |
int | hashCode() | 返回Map的hash code |
boolean | isEmpty() | Map为空时返回true |
Set<K> | keySet() | 返回所有Key构成的Set |
V | merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction) | 如果指定的Key没有映射到指定的Value,就用某个重映射函数将它与某个Value映射起来 |
V | put(K key, V value) | 向Map中加入一个K-V |
void | putAll(Map<? extends K,? extends V> m) | 将另一个Map中的所有K-V加入到这个Map中 |
V | putIfAbsent(K key, V value) | 如果指定的Key没有映射到指定的Value,则返回null,否则返回这个Value |
V boolean |
remove(Object key) remove(Object key, Object value) |
移除并返回指定的K对应的V(如果存在) 移除指定的K-V对 |
V boolean |
replace(K key, V value) replace(K key, V oldValue, V newValue) |
修改Map中的指定Key的Value为指定的Value |
void | replaceAll(BiFunction<? super K,? super V,? extends V> function) | 对Map中的所有K-V用指定函数进行修改并重映射 |
int | size() | 返回Map中的K-V对数量 |
Collection<V> | values() | 返回Map中所有Value构成的Collection |
3、遍历Map
3.1、遍历Key
要遍历Key可以使用for each循环遍历Map实例的keySet()方法返回的Set,它包含了所有的Key:
for( String key : map.keySet() ){ Integer value = map.get(key); System.out.println(key + " = " + value); }
3.2、同时遍历Key和Value
可以用for each循环遍历Map对象的entrySet()方法返回的Map.Entry<T , K>集合,它包含每一个Key-Value映射:
可以使用它的getKey(...)和getValue(...)方法来获取这个K-V对应的Key和Value
for(Map.Entry<String , Integer> entry : map.entrySet() ){ String key = entry.getKey(); Integer value = entry.getValue(); System.out.println(key + " = " + value); }
遍历时,Key的顺序不一定和开始放入的顺序相同。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性