首页 经验

JAVA hashmap的实现,hashtable,concurrenthashmap实现。

时间: 2024-10-21 09:37:04

(部分内容来自网络,其真实性存疑,为了避免对您造成误导,请谨慎甄别。)

在 Java 中,HashMapHashtableConcurrentHashMap 是用于存储键值对的集合类。它们各自有不同的特性和使用场景。下面是对这三种数据结构的实现和特点的详细介绍,以及代码示例。


1. HashMap

HashMap 是一个基于哈希表的实现,允许 null 值和 null 键。它不是线程安全的,因此在多线程环境下使用时需要额外的同步。


特点:

- 非线程安全-允许 null 键和 null 值-访问速度快-迭代顺序不固定#### 示例代码:


java

import 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 值- 相对较慢,因为它需要同步-迭代顺序不固定

示例代码:


java

import 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 值- 性能较好,支持高并发-迭代顺序不固定#### 示例代码:


java

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

 }

 }

}


总结


特性HashMapHashtableConcurrentHashMap
线程安全
允许 null 键
允许 null 值
访问性能
迭代顺序不固定不固定不固定


以上是 Java 中 HashMapHashtableConcurrentHashMap 的实现和特点的概述。选择合适的集合类取决于具体的使用场景和需求。


上一个 四辆小车,每辆车加满油可以走一公里,问怎么能让一辆小车走最远。 文章列表 下一个 MySQL的索引,B+树性质。

最新

工具

© 2019-至今 适观科技

沪ICP备17002269号