您好,登錄后才能下訂單哦!
小編給大家分享一下java中HashMap和Hashtable之間的區(qū)別有哪些,希望大家閱讀完這篇文章后大所收獲,下面讓我們一起去探討吧!
java中的HashMap和Hashtable示例
下面我們先通過示例來看看HashMap和Hashtable的區(qū)別。
HashMap和Hashtable將鍵/值對存儲在哈希表中。當使用Hashtable或HashMap時,我們指定一個用作鍵的對象,以及要鏈接到該鍵的值。然后對該鍵進行哈希處理,得到的哈希(散列)代碼將用作表中存儲值的索引。
java代碼:
import java.util.*; import java.lang.*; import java.io.*; /* 只有當類是公共的時,類的名稱才必須是“main” */ class Ideone { public static void main(String args[]) { //----------hashtable ------------------------- Hashtable<Integer,String> ht=new Hashtable<Integer,String>(); ht.put(100,"Amit"); ht.put(104,"Amit"); ht.put(101,"Vijay"); ht.put(102,"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"); // hashmap 允許重復(fù)值 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()); } } }
輸出:
HashMap和Hashtable之間的區(qū)別
1、HashMap是非同步的,不是線程安全的,如果沒有正確的同步代碼,則無法在多個線程之間共享;而Hashtable是同步的,是線程安全的,可以與許多線程共享。
注:如果不需要線程同步,HashMap通常優(yōu)于Hashtable。
2、HashMap允許一個null鍵和多個null值,而Hashtable不允許任何null鍵或值。
3、hashmap實現(xiàn)linkedhashmap維護插入順序,treemap根據(jù)鍵的升序?qū)τ成溥M行排序。而hashtable不能保證任何類型的順序;它不會以任何特定的順序維護映射。
4、HashMap是繼承自AbstractMap類,而HashTable是繼承自Dictionary類。
5、Hashtable默認的初始容量為11,之后每次擴充,容量就變?yōu)樵瓉淼?n+1;而,HashMap默認的初始容量大小為16,之后每次擴充,容量就變?yōu)樵瓉淼?倍。
6、計算hash值的方法不同
7、HashMap的迭代器是fail-fast機制的,而Hashtable的迭代器不是fail-fast機制的。
看完了這篇文章,相信你對java中HashMap和Hashtable之間的區(qū)別有哪些有了一定的了解,想了解更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。