Java 中 HashMap 和 HashTable 的区别是什么
HashMap 和 HashTable 都是 Java 集合框架中最重要的类之一。HashMap 和 HashTable 都以键值对的形式存储数据,在存储数据时,使用哈希函数对键进行哈希处理,生成的哈希码用作表中存储值的索引。但是,这两个类之间仍然存在许多差异,我们将在下面讨论。
以下是 HashMap 和 HashTable 之间的重要区别。
序号 | 关键点 | HashMap | HashTable |
---|---|---|---|
1 | 简介 | HashMap 是 HashTable 的高级版本,作为 JDK 1.2 中的新类引入。 | 另一方面,HashTable 是遗留类,在 HashMap 之前引入。 |
2 | 内部实现 | 这两个类的内部实现在某种程度上是相同的,但在 HashMap 的情况下,允许一个空键和多个空值。 | HashTable 在内部以不允许任何空键或任何空值的方式实现。 |
3 | 同步 | HashMap 中未实现同步,并且不是线程安全的,因此在没有适当的同步代码的情况下不能在多个线程之间共享。 | 另一方面,HashTable 是同步的并且是线程安全的,因此可以与多个线程共享。 |
4 | 遍历元素 | HashMap 提供迭代器来迭代其存储的值。 | 另一方面,除了迭代器之外,HashTable 还提供枚举器来遍历其存储的值。 |
5 | 索引性能 | 由于没有同步,HashMap 比 HashTable 更快,并且在不需要同步时是首选。 | HashTable 中的同步使其比 HashMap 慢,但也避免了编写额外的代码来获得同步。 |
6 | 继承 | HashMap 继承 AbstractMap 类。 | 另一方面,HashTable 继承 Dictionary 类。 |
HashMap 与 HashTable 示例
JavaTester.java
import java.util.*; import java.lang.*; import java.io.*; public class JavaTester{ public static void main(String args[]){ Hashtable ht=new Hashtable(); ht.put(101,"John"); ht.put(101,"Jhony"); ht.put(102,"Smith"); ht.put(103,"Andy"); System.out.println("-------------Hash table--------------"); Set<Integer> keySet = ht.keySet(); for (Integer key:keySet) { System.out.println(key + " "+ht.get(key)); } HashMap hm=new HashMap(); hm.put(100,"John"); hm.put(104,"John"); // hash map allows duplicate values hm.put(101,"Smith"); hm.put(102,"Andy"); System.out.println("-----------Hash map-----------"); Set<Integer> keySet1 = ht.keySet(); for (Integer key:keySet) { System.out.println(key + " "+hm.get(key)); } } }
输出
-------------Hash table-------------- 103 Andy 102 Smith 101 Jhony -----------Hash map----------- 100 John 101 Smith 102 Andy 104 John
广告