HashMap 是 Java 集合框架中的一个实现类,它基于哈希表实现。HashMap 具有以下特点:
HashMap 使用哈希表数据结构,它通过哈希函数将键映射到哈希表中的索引位置。当多个键映射到同一个索引位置时,它使用链表或红黑树等数据结构来存储这些键值对。这使得 HashMap 能够以常数时间复杂度 O(1) 来执行添加、删除和查找操作(在均匀分布的情况下)。
哈希冲突是指不同的键经过哈希函数计算后映射到了相同的索引位置。HashMap 使用链表或红黑树等数据结构来存储具有相同哈希值的键值对。当发生冲突时,新的键值对会被添加到链表或树中,而不会覆盖原有的键值对。
可以使用迭代器(Iterator)或增强型 for 循环来遍历 HashMap 中的键值对。例如:
HashMap<String, Integer> map = new HashMap<>();
// 添加键值对
map.put("Alice", 28);
map.put("Bob", 35);
// 遍历键值对
for (Map.Entry<String, Integer> entry : map.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + ": " + value);
}
可以使用 containsKey(key) 方法来判断 HashMap 中是否包含指定的键,使用 containsValue(value) 方法来判断是否包含指定的值。这些方法会返回布尔值。
容量是哈希表中桶(bucket)的数量,负载因子是哈希表在扩容之前可以达到的平均负载程度。当哈希表中的元素数量达到容量乘以负载因子时,哈希表会自动进行扩容。
HashMap 使用键的 hashCode() 方法计算哈希值,然后通过对容量取模来确定键值对应的桶索引位置。哈希算法的质量直接影响到哈希表的性能,应尽量保证哈希算法分布均匀。