Java Map – Java中的Map
Java Map是集合框架的一部分。
Java Map对象用于存储键值映射。
Java Map不能包含重复的键,但是允许重复的值。
Java map
Java中有关Map的一些重要要点是:
Map提供了三个集合视图–键集,键-值映射集和值集合。
地图不保证映射的顺序,但是取决于实现方式。
例如,HashMap不能保证映射的顺序,但是TreeMap可以保证。Map利用hashCode并在Key上使用equals方法进行获取和放置操作。
因此,可变类不是Map键的理想选择。
如果放置后hashCode或者等于的值发生变化,则get操作中不会获得正确的值。Java中流行的Map实现类是HashMap,Hashtable,TreeMap,ConcurrentHashMap和LinkedHashMap。
AbstractMap类提供了Map接口的骨架实现,大多数Map具体类扩展了AbstractMap类并实现了所需的方法。
Java Map方法
让我们看一些重要的Map方法。
int size():返回此Map中的键值映射数。
boolean isEmpty():如果没有映射,则返回true,否则返回false。
boolean containsValue(Object value):如果至少有一个键映射到指定值,则返回true,否则返回false。
V get(Object key):返回映射到给定键的值,如果找不到映射,则返回null。
V put(K key,V value):将键值对的映射添加到映射。
如果已经有一个映射到该键的值,则替换该值。
此方法返回与key关联的先前值;如果没有key映射,则返回null。V remove(Object key):如果存在,则从此映射中删除键的映射。
返回此映射先前与该键相关联的值;如果该映射不包含该键的映射关系,则返回null。void putAll(Map <?扩展K,?扩展V> m):将所有映射从指定映射复制到此映射。
void clear():从Map中删除所有映射。
Set <K> keySet():返回Map中所有键的Set视图。
此密钥集由Map支持,因此对Map的任何修改都将反映到密钥集上,反之亦然。Collection <V> values():返回Map中所有值的集合视图。
此集合由Map支持,因此Map中的任何更改都将反映到该值集合,反之亦然。Set <Map.Entry <K,V >> entrySet():返回Map中映射的Set视图。
此Set由Map支持,因此Map中的任何修改都将反映在条目集中,反之亦然。
Java 8中引入的Java Map中的方法很少。
default V getOrDefault(Object key,V defaultValue):返回指定键所映射到的值;如果此映射不包含该键的映射关系,则返回defaultValue。
默认void forEach(BiConsumer <?super K,?super V> action):对此映射中的每个条目执行给定的操作。
默认void replaceAll(BiFunction <?super K,?super V,?extends V>函数):将每个条目的值替换为在该条目上调用给定函数的结果。
默认V putIfAbsent(K键,V值):如果指定键尚未与值关联(或者映射为null),则将其与给定值关联并返回null,否则返回当前值。
default boolean remove(Object key,Object value):仅当当前映射到指定值时,才删除指定键的条目。
默认布尔替换(K key,V oldValue,V newValue):仅当当前映射到指定值时,才替换指定键的条目。
默认V replace(K键,V值):仅当指定键当前映射到某个值时,才替换该条目。
默认的V computeIfAbsent(K键,Function <?超级K,?扩展V> mappingFunction):如果指定的键尚未与某个值关联(或者映射为null),则尝试使用给定的映射函数和除非为null,否则将其输入到此地图中。
默认VcomputeIfPresent(K键,BiFunction <?super K,?super V,?extended V> remappingFunction):如果指定键的值存在且非空,则尝试计算给定键及其当前值的新映射映射值。
如果函数返回null,则删除映射。默认V计算(K键,BiFunction <?super K,?super V,?扩展V> remappingFunction):尝试计算指定键及其当前映射值的映射(如果没有当前映射,则为null)。
默认V merge(K键,V值,BiFunction <?super V,?super V,?extended V> remappingFunction):如果指定键尚未与值关联或者与null关联,则将其与给定的non关联-null值。
否则,用给定的重映射函数的结果替换关联的值,如果结果为null,则将其删除。
您会注意到,Java 8 Map接口中添加的所有新方法都是带有实现的默认方法。
这样做是为了确保任何实现Map接口的类都不会发生编译错误。
Java Map示例
让我们看一个简单的Java Map示例程序。
我们将在示例程序中使用Map实现类HashMap。
package com.theitroad.examples; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class MapExample { public static void main(String[] args) { Map<String, String> data = new HashMap<>(); data.put("A", "A"); //put example data.put("B", "B"); data.put("C", "C"); data.put("D", null); //null value data.put(null, "Z"); //null key String value = data.get("C"); //get example System.out.println("Key = C, Value = " + value); value = data.getOrDefault("E", "Default Value"); System.out.println("Key = E, Value=" + value); boolean keyExists = data.containsKey(null); boolean valueExists = data.containsValue("Z"); System.out.println("keyExists= " + keyExists + ", valueExists= " + valueExists); Set<Entry<String, String>> entrySet = data.entrySet(); System.out.println(entrySet); System.out.println("data map size=" + data.size()); Map<String, String> data1 = new HashMap<>(); data1.putAll(data); System.out.println("data1 mappings= " + data1); String nullKeyValue = data1.remove(null); System.out.println("data1 null key value = " + nullKeyValue); System.out.println("data1 after removing null key = " + data1); Set<String> keySet = data.keySet(); System.out.println("data map keys = " + keySet); Collection<String> values = data.values(); System.out.println("data map values = " + values); data.clear(); System.out.println("data map is empty =" + data.isEmpty()); } }
上述Map示例程序的输出为;
Key = C, Value = C Key = E, Value=Default Value keyExists= true, valueExists= true [null=Z, A=A, B=B, C=C, D=null] data map size=5 data1 mappings= {null=Z, A=A, B=B, C=C, D=null} data1 null key value = Z data1 after removing null key = {A=A, B=B, C=C, D=null} data map keys = [null, A, B, C, D] data map values = [Z, A, B, C, null] data map is empty =true