Java中Hashtable和HashMap类之间的区别

HashMap与HashSet

在这里,我们将看到Hashtable与Java中的HashMap有何不同?

哈希表类

  • Hashtable是一个可在java.util包中使用的类。

  • 在Hashtable中,该类的每个方法都是同步的,以便提供线程安全。

  • Hashtable是线程安全的(即一次只允许一个线程在Hashtable对象上操作)。

  • 在Hashtable中,一个线程一次在Hashtable对象上操作,因此需要更多的时间来完成任务,换句话说,可以说它增加了线程的等待时间。

  • 在Hashtable的情况下,性能低下只是因为花费了更多的线程等待时间。

  • 我们可以为键和值插入null。

  • Hashtable是一个遗留类,因为该类是在Java的早期版本1.0中引入的,因此在收集框架到来时需要重新设计该类以支持收集。

  • 哈希表不能完全提供唯一性(即,键不允许重复,值不允许重复)。

  • 在哈希表插入中,不保留顺序(即,插入和检索顺序不需要相同)。

示例

import java.util.Hashtable;

class HashTableClass {

    int hashcode;

    //类构造器以实例化哈希码

    HashTableClass(int hashcode) {

        this.hashcode = hashcode;

    }

    //覆盖hashCode()

    public int hashCode() {

        return hashcode;

    }

    //覆盖toString()字符串转换

    public String toString() {

        return hashcode + " ";

    }

    public static void main(String[] args) {

        //创建一个实例 

        Hashtable ht = new Hashtable();

        //通过put()在Hashtable中添加一些对象 

        ht.put(new HashTableClass(10), "Java");

        ht.put(new HashTableClass(3), "C");

        ht.put(new HashTableClass(4), "C++");

        ht.put(new HashTableClass(3), "Ruby");

        ht.put(new HashTableClass(5), "C");

        ht.put(new HashTableClass(6), "null");

        //显示当前哈希表

        System.out.println("Current Hashtable is :" + ht);

    }

}

输出结果

E:\Programs>javac HashTableClass.java

E:\Programs>java HashTableClass

Current Hashtable is :{10 =Java, 6 =null, 5 =C, 4 =C++, 3 =Ruby, 3 =C}

在这里,我们将看到HashMap与Java中的Hashtable有何不同?

哈希映射

  • HashMap是一个可在java.util包中使用的类。

  • 在HashMap中,没有类的方法被同步,因此它不提供线程安全性。

  • HashMap不是线程安全的(即,一次允许多个线程对Hashtable对象进行操作)。

  • 在HashMap中,多个线程同时在Hashtable对象上操作,因此完成任务所需的时间更少,换句话说,我们可以说它减少了线程的等待时间。

  • 在HashMap的情况下,性能高是因为花费了更少的线程等待时间。

  • 我们可以为键(一次)和值(多次)插入null。

  • HashMap不是遗留类,因为该类是在Java的更高版本1.2中引入的,因此在收集框架出现时,无需重新设计该类来支持收集。

  • HashMap不能完全提供唯一性(即,键不允许重复,值不允许重复)。

  • 在HashMap中,不保留插入顺序(即,插入和检索顺序不需要相同)。

示例

//Java程序演示Map的行为

import java.util.Collection;

import java.util.HashMap;

class HashMapClass {

    public static void main(String[] args) {

        //创建一个实例 of HashMap

        HashMap hm = new HashMap();

        //通过使用put()方法在HashMap中添加一些值

        hm.put("Java", 1000);

        hm.put("C", 2000);

        hm.put("C++", 3000);

        hm.put("Ruby", 4000);

        hm.put("Python", 1000);

        hm.put("null", null);

        hm.put("Django", null);

        //这里我们不会得到任何错误,但是键接受一个null-

        hm.put("null", 7000);

        //显示映射的检索顺序

        System.out.println("Current HashMap list is :" + hm);

        //通过使用values()查找HashMap的值

        Collection values = hm.values();

        //显示HashMap的值

        System.out.println("Current HashMap Key values is :" + values);

    }

}

输出结果

E:\Programs>javac HashMapClass.java

E:\Programs>java HashMapClass

Current HashMap list is :{Ruby=4000, C=2000, Django=null, 

Python=1000, C++=3000, null=7000, Java=1000}

Current HashMap Key values is :[4000, 2000, null, 1000, 3000, 7000, 1000]

以上是 Java中Hashtable和HashMap类之间的区别 的全部内容, 来源链接: utcz.com/z/321532.html

回到顶部