JAVA hashmap的实现,hashtable,concurrenthashmap实现。
时间: 2024-10-21 09:37:04
(部分内容来自网络,其真实性存疑,为了避免对您造成误导,请谨慎甄别。)
在 Java 中,HashMap
、Hashtable
和 ConcurrentHashMap
是用于存储键值对的集合类。它们各自有不同的特性和使用场景。下面是对这三种数据结构的实现和特点的详细介绍,以及代码示例。
1. HashMap
HashMap
是一个基于哈希表的实现,允许 null
值和 null
键。它不是线程安全的,因此在多线程环境下使用时需要额外的同步。
特点:
- 非线程安全-允许 null
键和 null
值-访问速度快-迭代顺序不固定#### 示例代码:
javaimport java.util.HashMap;
public class HashMapExample {
public static void main(String[] args) {
// 创建 HashMap HashMap<String, Integer> map = new HashMap<>();
// 添加元素 map.put("Apple",1);
map.put("Banana",2);
map.put("Orange",3);
map.put("Grapes", null); //允许 null 值
map.put(null,4); //允许 null 键
// 输出 HashMap
System.out.println("HashMap contents:");
for (String key : map.keySet()) {
System.out.printf("Key: %s, Value: %d%n", key, map.get(key));
}
}
}
2. Hashtable
Hashtable
是一个早期的哈希表实现,所有的方法都是同步的,因此它是线程安全的。与 HashMap
不同的是,Hashtable
不允许 null
键和 null
值。
特点:
-线程安全- 不允许 null
键和 null
值- 相对较慢,因为它需要同步-迭代顺序不固定
示例代码:
javaimport java.util.Hashtable;
public class HashtableExample {
public static void main(String[] args) {
// 创建 Hashtable Hashtable<String, Integer> hashtable = new Hashtable<>();
// 添加元素 hashtable.put("Apple",1);
hashtable.put("Banana",2);
hashtable.put("Orange",3);
// hashtable.put(null,4); // 会抛出 NullPointerException // hashtable.put("Grapes", null); // 会抛出 NullPointerException // 输出 Hashtable System.out.println("Hashtable contents:");
for (String key : hashtable.keySet()) {
System.out.printf("Key: %s, Value: %d%n", key, hashtable.get(key));
}
}
}
3. ConcurrentHashMapConcurrentHashMap
是一个线程安全的哈希表实现,允许并发读和写操作。它通过分段锁定(segment locking)来提高性能。
特点:
-线程安全-允许 null
键和 null
值- 性能较好,支持高并发-迭代顺序不固定#### 示例代码:
javaimport java.util.concurrent.ConcurrentHashMap;
public class ConcurrentHashMapExample {
public static void main(String[] args) {
// 创建 ConcurrentHashMap ConcurrentHashMap<String, Integer> concurrentMap = new ConcurrentHashMap<>();
// 添加元素
concurrentMap.put("Apple",1);
concurrentMap.put("Banana",2);
concurrentMap.put("Orange",3);
// concurrentMap.put(null,4); // 会抛出 NullPointerException
// concurrentMap.put("Grapes", null); // 会抛出 NullPointerException
// 输出
ConcurrentHashMap System.out.println("ConcurrentHashMap contents:");
for (String key : concurrentMap.keySet()) {
System.out.printf("Key: %s, Value: %d%n", key, concurrentMap.get(key));
}
}
}
总结
特性 | HashMap | Hashtable | ConcurrentHashMap |
线程安全 | 否 | 是 | 是 |
允许 null 键 | 是 | 否 | 否 |
允许 null 值 | 是 | 否 | 否 |
访问性能 | 快 | 慢 | 快 |
迭代顺序 | 不固定 | 不固定 | 不固定 |
以上是 Java 中 HashMap
、Hashtable
和 ConcurrentHashMap
的实现和特点的概述。选择合适的集合类取决于具体的使用场景和需求。