当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java HashMap和HashTable的区别用法及代码示例


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

哈希图与哈希表

  • HashMap 不同步。它不是线程安全的,如果没有正确的同步代码,就不能在多个线程之间共享,而 Hashtable 是同步的。它是线程安全的,可以与多个线程共享。
  • HashMap 允许一个空键和多个空值,而 Hashtable 不允许任何空键或值。
  • 如果不需要线程同步,则 HashMap 通常优于 HashTable。

Difference Between Hashmap and Hashtable

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

现在你一定想知道为什么 HashTable 不允许 null 而 HashMap 允许

答案很简单。为了成功地在 HashTable 中存储和检索对象,用作键的对象必须实现 hashCode 方法和 equals 方法。由于 null 不是对象,因此它无法实现这些方法。 HashMap是Hashtable的高级版本和改进。 HashMap是后来创建的。

例子:

Java


// 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());
        }
    }
}
输出
-------------Hash table--------------
103 Rahul
102 Ravi
101 Vijay
-----------Hash map-----------
100 Amit
101 Vijay
102 Rahul
104 Amit

本文由 Aditya Goel 编译。



相关用法


注:本文由纯净天空筛选整理自佚名大神的英文原创作品 Differences between HashMap and HashTable in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。