Skip to content

HashMap是 Java 中实现了Map接口的常用类之一。它基于哈希表Hash Table的数据结构,提供了快速的插入、删除和查找操作。

以下是HashMap的一些特点:

  • 无序性HashMap不保证元素的顺序,即插入元素的顺序不一定等于遍历时的顺序。如果需要有序的 Map,可以使用SortedMap接口的实现类如TreeMap
  • 键值对HashMap存储的数据以键值对的形式存在,每个键都唯一且与一个值相关联。
  • 允许空键和空值HashMap允许使用null作为键和值。但需要注意,当使用某个键检索值时,如果该键不存在,则返回null并不能确定是否表示值为null还是键不存在。
  • 高效性能HashMap通过哈希函数将键映射到内部数组的索引位置,从而实现快速的插入、删除和查找操作。在大多数情况下,这些操作的时间复杂度为O(1)
  • 初始容量和负载因子:HashMap 的初始容量指的是内部数组的大小,默认为16。负载因子是指内部数组填满程度的阈值,默认为0.75。当 HashMap 的元素数量超过负载因子乘以当前容量时,会触发扩容操作,重新调整内部数组的大小。
  • 线程不安全HashMap是非线程安全的,如果在多个线程同时访问和修改HashMap时,需要采取额外的同步措施来保证线程安全性。可以使用ConcurrentHashMap类来实现线程安全的Map

下面是一个示例代码,展示了如何创建和使用HashMap

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

public class HashMapExample {
    public static void main(String[] args) {
        // 创建HashMap对象
        Map<String, Integer> map = new HashMap<>();

        // 添加键值对
        map.put("apple", 10);
        map.put("banana", 5);
        map.put("orange", 8);

        // 获取值
        int count = map.get("apple");
        System.out.println("Number of apples: " + count);

        // 遍历键值对
        for (Map.Entry<String, Integer> entry : map.entrySet()) {
            String key = entry.getKey();
            int value = entry.getValue();
            System.out.println(key + ": " + value);
        }
    }
}