Java中HashMap和HashTable的区别

 HashTable:

HashMap: 

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

Hashmap 与 Hashtable 

        HashMap 是非同步的。它不是线程安全的,如果没有适当的同步代码,就无法在多个线程之间共享,而 Hashtable 是同步的。它是线程安全的,可以与多个线程共享。
HashMap 允许一个空键和多个空值,而 Hashtable 不允许任何空键或值。
如果不需要线程同步,通常优先选择 HashMap 而不是 HashTable。

Hashmap 和 Hashtable 之间的区别

序号HashmapHashtable
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 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值