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);
}
}
}