二,Map集合(实际是一个接口)

bjynjj / 2024-10-30 / 原文

Map 集合介绍

在 Java 中,Map 是一种存储键值对的集合,它允许你通过键快速查找对应的值。Map 接口有两个主要的实现类:HashMapTreeMap。这些类提供了不同的性能特点和排序特性。

Map 集合的特点

  1. 键的唯一性:在同一个 Map 集合中,键是唯一的。
  2. 值的重复性:在同一个 Map 集合中,值可以发生重复。
  3. 键值对:一对键值表示 Map 集合中的一个元素。

方法详解

  • V put(K key, V value):向 Map 中添加或更新键值对。
  • V remove(Object key):根据键从 Map 中移除键值对,并返回被移除的值。
  • void clear():清空 Map 中的所有键值对。
  • boolean containsKey(Object key):检查 Map 是否包含指定的键。
  • boolean containsValue(Object value):检查 Map 是否包含指定的值。
  • boolean isEmpty():检查 Map 是否为空。
  • int size():获取 Map 中键值对的数量。
  • V get(Object key):根据键从 Map 中获取值。
  • Set<K> keySet():获取 Map 中所有键的集合。
  • Collection<V> values():获取 Map 中所有值的集合。
  • Set<Map.Entry<K,V>> entrySet():获取 Map 中所有键值对的集合。

Map 集合中键的唯一性

Map 集合中,键的唯一性是通过键的 hashCode() 方法和 equals() 方法来保证的。如果两个键的哈希值相同,并且 equals() 方法返回 true,则这两个键被认为是相同的,Map 将不会添加重复的键。

若想要使用 Map 集合存储自定义对象作为键,需要元素类型本身重写 hashCode 方法和 equals 方法。

Map 集合的实现类

HashMap 类

  • 底层数据结构:哈希表
  • 特点:查找速度快,键唯一,值可以重复,线程不安全,效率高。
  • 使用场景:适用于需要快速查找的场景。

TreeMap 类

  • 底层数据结构:红黑树(自平衡二叉树)
  • 特点:键值对有序,键唯一,值可以重复,线程不安全,效率相对较低。
  • 使用场景:适用于需要有序集合的场景。

示例代码

import java.util.HashMap;
import java.util.Map;

public class MapExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();

        // 向 Map 中添加元素
        map.put("Alice", 25);
        map.put("Bob", 30);
        map.put("Charlie", 35);

        // 根据键获取值
        Integer age = map.get("Bob");
        System.out.println("Bob's age: " + age);

        // 检查 Map 是否包含某个键
        boolean containsKey = map.containsKey("Alice");
        System.out.println("Contains Alice: " + containsKey);

        // 检查 Map 是否包含某个值
        boolean containsValue = map.containsValue(30);
        System.out.println("Contains age 30: " + containsValue);

        // 移除元素
        map.remove("Charlie");

        // 清空 Map
        map.clear();

        // 检查 Map 是否为空
        boolean isEmpty = map.isEmpty();
        System.out.println("Is map empty: " + isEmpty);

        // 获取 Map 的大小
        int size = map.size();
        System.out.println("Map size: " + size);
    }
}

总结

Map 接口及其实现类提供了键值对的存储和管理功能。HashMap 适合于需要快速查找的场景,而 TreeMap 适合于需要有序集合的场景。通过理解 Map 接口及其实现类的特点和使用方法,可以更有效地进行数据存储和管理。