首页 课程 师资 教程 报名

HashMap与HashTable的区别

  • 2022-12-12 11:09:04
  • 218次 星辉

HashMap和Hashtable将键值对存储在哈希表中。使用 Hashtable 或 HashMap 时,我们指定用作键的对象以及要链接到该键的值。然后对键进行哈希处理,生成的哈希码用作表中存储值的索引。现在让我们借助一个例子来讨论。

哈希图与哈希表

HashMap 是非同步的。它不是线程安全的,如果没有适当的同步代码就不能在多个线程之间共享,而 Hashtable 是同步的。它是线程安全的,可以与多个线程共享。

HashMap 允许一个空键和多个空值,而 Hashtable 不允许任何空键或空值。

如果不需要线程同步,HashMap 通常优于 HashTable。

哈希图和哈希表之间的区别

  哈希图 哈希表
1 没有方法是同步的。 每个方法都是同步的。
2 多个线程可以同时运行,因此 hashmap 的对象不是线程安全的。 一次只允许一个线程操作哈希表的对象。因此它是线程安全的。
3 线程不需要等待,因此性能相对较高。 它增加了线程的等待时间,因此性能很低。
4 键和值都允许为空。 键和值都不允许为空。否则,我们将得到一个空指针异常。
5 它是在 1.2 版本中引入的。 它是在 1.0 版本中引入的。
6 它是非遗产。 这是一个遗产。

现在您一定想知道为什么 HashTable 不允许 null 而 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 阿米特
101 维杰
102 拉胡尔
104 阿米特

 

选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交