Java中的HashMap和HashTable有什么区别
HashMap和HashTable都是Java Collection框架最重要的类之一。HashMap和HashTable都将数据存储在键值对中,并且在存储数据时使用哈希对键进行哈希处理,并将生成的哈希码用作将值存储在表中的索引。但是,这两个类之间仍有许多差异,我们将在下面讨论。
以下是HashMap和HashTable之间的重要区别。
序号 | 键 | 哈希映射 | 哈希表 |
---|---|---|---|
1 | 介绍 | Hashmap是HashTable的高级版本,在JDK 1.2中作为新类引入。 | 另一方面,HashTable是旧类,是在HashMap之前引入的。 |
2 | 内部实施 | 这两个类的内部实现在某种程度上是相同的,但是在HashMap的情况下,允许一个null键和多个null值。 | HashTable在内部以不允许任何null键或任何null值的方式实现。 |
3 | 同步化 | 同步未在HashMap中实现,并且不是线程安全的,因此如果没有适当的同步代码,则无法在许多线程之间共享同步。 | 另一方面,HashTable是同步的并且是线程安全的,因此可以与许多线程共享。 |
4 | 遍历元素 | HashMap为迭代提供Iterator以便遍历存储在其中的值。 | 另一方面,HashTable与Iterator一起还提供Enumerator来遍历存储在其中的值。 |
5 | 指数表现 | 由于缺少同步,因此HashMap比HashTable更快,并且在不需要同步时是首选。 | 与HashMap相比,HashTable中的同步使其速度较慢,但也无需编写额外的代码来获取同步。 |
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
以上是 Java中的HashMap和HashTable有什么区别 的全部内容, 来源链接: utcz.com/z/322046.html