在 Java 中,Map 是一种键值对的集合,它是 Java 集合框架中的一种接口,位于 java.util 包中。Map 接口提供了高效的键值对存储和查找功能,适用于需要通过键来查找值的场景。它可以用于存储和操作关联数据,如字典、配置信息、缓存等。
Map 接口的特点包括:
(1)键值对:Map中的元素是以键值对的形式存储的,每个键对应一个值。
(2)键的唯一性:Map中的键是唯一的,不允许重复。
(3)值的重复性:Map中的值可以重复,允许多个键对应相同的值。
(4)无序性:Map中的元素没有固定的顺序,不保证元素的存储顺序和插入顺序一致。
Map 接口定义了一系列方法用于对集合进行操作,包括但不限于以下常用方法:
添加键值对:put(K key, V value)。
获取值:get(Object key)。
判断键是否存在:containsKey(Object key)。
判断值是否存在:containsValue(Object value)。
删除键值对:remove(Object key)。
获取键值对数量:size()。
遍历键值对:forEach(BiConsumer<? super K, ? super V> action)、entrySet() 等。
常用的 Map 实现类有:
HashMap:使用哈希表实现,对键进行散列存储,支持快速查找,不保证键值对的顺序。
TreeMap:使用红黑树实现,对键进行排序存储,键按照自然顺序或指定的比较器进行排序。
LinkedHashMap:使用哈希表和链表实现,保持键值对的插入顺序,同时支持快速查找。
下面是一个Java Map的完整示例,展示了Map的基本用法:
import java.util.HashMap; import java.util.Map; public class MapExample { public static void main(String[] args) { // 创建一个HashMap对象 Map<String, Integer> map = new HashMap<>(); // 添加键值对 map.put("Apple", 10); map.put("Banana", 20); map.put("Orange", 15); map.put("Apple", 5); // 添加重复键,会覆盖原有的值 // 获取键值对数量 System.out.println("键值对数量:" + map.size()); // 判断键是否存在 System.out.println("是否包含键\"Apple\":" + map.containsKey("Apple")); System.out.println("是否包含键\"Grape\":" + map.containsKey("Grape")); // 判断值是否存在 System.out.println("是否包含值20:" + map.containsValue(20)); System.out.println("是否包含值30:" + map.containsValue(30)); // 获取值 System.out.println("键\"Apple\"对应的值:" + map.get("Apple")); // 遍历键值对 System.out.println("遍历键值对:"); for (Map.Entry<String, Integer> entry : map.entrySet()) { String key = entry.getKey(); Integer value = entry.getValue(); System.out.println(key + ": " + value); } // 删除键值对 map.remove("Banana"); System.out.println("删除后的键值对:" + map); } }
运行示例,输出结果:
键值对数量:3 是否包含键"Apple":true 是否包含键"Grape":false 是否包含值20:true 是否包含值30:false 键"Apple"对应的值:5 遍历键值对: Apple: 5 Orange: 15 Banana: 20 删除后的键值对:{Apple=5, Orange=15}
在上面的示例中,我们首先创建了一个 HashMap 对象,并使用 put() 方法向 Map 中添加键值对。由于 Map 不允许重复的键,添加重复键时,会覆盖原有的值。
然后,使用 size() 方法获取键值对的数量,并使用 containsKey() 方法判断键是否存在,使用 containsValue() 方法判断值是否存在。
接下来,使用 get() 方法获取指定键对应的值,并使用 entrySet() 方法返回包含所有键值对的 Set 集合。然后,使用 for-each 循环遍历键值对,并使用 getKey() 和 getValue() 方法获取键和值。
最后,使用 remove() 方法删除指定键值对。
Map 的更多方法及详细用法请参考Java API。