Java中HashMap和HashTable的区别
HashTable:
HashMap:
HashMap和Hashtable将键和值对存储在哈希表中。使用 Hashtable 或 HashMap 时,我们指定一个用作键的对象以及要链接到该键的值。然后对键进行哈希处理,并将生成的哈希码用作表中存储值的索引。现在让我们借助一个例子来讨论一下。
Hashmap 与 Hashtable
HashMap 是非同步的。它不是线程安全的,如果没有适当的同步代码,就无法在多个线程之间共享,而 Hashtable 是同步的。它是线程安全的,可以与多个线程共享。
HashMap 允许一个空键和多个空值,而 Hashtable 不允许任何空键或值。
如果不需要线程同步,通常优先选择 HashMap 而不是 HashTable。
Hashmap 和 Hashtable 之间的区别
序号 | Hashmap | Hashtable |
---|---|---|
1. | 没有同步任何方法。 | 每种方法都是同步的。 |
2. | 多个线程可以同时操作,因此 hashmap 的对象不是线程安全的。 | 每次只允许一个线程操作 Hashtable 的对象。因此它是线程安全的。 |
3. | 线程不需要等待,因此相对性能较高。 | 它增加了线程的等待时间,因此性能较低。 |
4. | 键和值都允许为空。 | 键和值都不允许为空。否则,我们将得到空指针异常。 |
5. | 它是在 1.2 版本中引入的。 | 它是在 1.0 版本中引入的。 |
6. | 它不是遗留的。 | 这是一种遗产。 |
现在你一定想知道为什么 HashTable 不允许为空而 HashMap 允许?
答案很简单。为了成功地从 HashTable 中存储和检索对象,用作键的对象必须实现 hashCode 方法和 equals 方法。由于 null 不是对象,因此它无法实现这些方法。HashMap 是 Hashtable 的高级版本和改进。HashMap 是后来创建的。
例子:
// Java program to demonstrate
// HashMap and HashTable
import java.util.*;
import java.lang.*;
import java.io.*;
// Name of the class has to be "Main"
// only if the class is public
class Ideone
{
public static void main(String args[])
{
//----------hashtable -------------------------
Hashtable<Integer,String> ht=new Hashtable<Integer,String>();
ht.put(101," ajay");
ht.put(101,"Vijay");
ht.put(102,"Ravi");
ht.put(103,"Rahul");
System.out.println("-------------Hash table--------------");
for (Map.Entry m:ht.entrySet()) {
System.out.println(m.getKey()+" "+m.getValue());
}
//----------------hashmap--------------------------------
HashMap<Integer,String> hm=new HashMap<Integer,String>();
hm.put(100,"Amit");
hm.put(104,"Amit");
hm.put(101,"Vijay");
hm.put(102,"Rahul");
System.out.println("-----------Hash map-----------");
for (Map.Entry m:hm.entrySet()) {
System.out.println(m.getKey()+" "+m.getValue());
}
}
}
输出:
-------------哈希表--------------
103 Rahul
102 Ravi
101 Vijay
-----------哈希映射-- ---------
100 Amit
101 Vijay
102 Rahul
104 Amit
原文地址:https://blog.csdn.net/hefeng_aspnet/article/details/142518731
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!