HashMap和Hashtable的詳細區別
1 HashMap不是執行緒安全的
hastmap是一個介面 是map介面的子介面,是將鍵對映到值的物件,其中鍵和值都是物件,並且不能包含重複鍵,但可以包含重複值。HashMap允許null key和null value,而hashtable不允許。
2 HashTable是執行緒安全的一個Collection。
HashMap是Hashtable的輕量級實現(非執行緒安全的實現),他們都完成了Map介面,主要區別在於HashMap允許空(null)鍵值(key),由於非執行緒安全,效率上可能高於Hashtable。
HashMap允許將null作為一個entry的key或者value,而Hashtable不允許。
HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因為contains方法容易讓人引起誤解。
Hashtable繼承自Dictionary類,而HashMap是Java1.2引進的Map interface的一個實現。
最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多個執行緒訪問Hashtable時,不需要自己為它的方法實現同步,而HashMap 就必須為之提供外同步。
Hashtable和HashMap採用的hash/rehash演算法都大概一樣,所以效能不會有很大的差異。
public static void main(String args[])
{
HashTable h=new HashTable();
h.put(“使用者1”,new Integer(90));
h.put(“使用者2”,new Integer(50));
h.put(“使用者3”,new Integer(60));
h.put(“使用者4”,new Integer(70));
h.put(“使用者5”,new Integer(80));
Enumeration e=h.elements();
while(e.hasMoreElements()){
System.out.println(e.nextElement());
}
map 的方法:
clear()從 Map 中刪除所有對映
remove(Object key)從 Map 中刪除鍵和關聯的值
put(Object key, Object value)將指定值與指定鍵相關聯
get(Object key)返回與指定鍵關聯的值
containsKey(Object key)如果 Map 包含指定鍵的對映,則返回 true
containsValue(Object value)如果此 Map 將一個或多個鍵對映到指定值,則返回 true
isEmpty()如果 Map 不包含鍵-值對映,則返回 true size()返回 Map 中的鍵-值對映的數目
這些都代表了Java中的集合,這裡主要從其元素是否有序,是否可重複來進行區別記憶,以便恰當地使用,當然還存在同步方面的差異,見上一篇相關文章。
有序否 |
允許元素重複否 |
||
Collection |
否 |
是 |
|
List |
是 |
是 |
|
Set |
AbstractSet |
否 |
否 |
HashSet |
|||
TreeSet |
是(用二叉樹排序) |
||
Map |
AbstractMap |
否 |
使用key-value來對映和儲存資料,Key必須惟一,value可以重複 |
HashMap |
|||
TreeMap |
是(用二叉樹排序) |
List 介面對Collection進行了簡單的擴充,它的具體實現類常用的有ArrayList和LinkedList。你可以將任何東西放到一個List容器中,並在需要時從中取出。ArrayList從其命名中可以看出它是一種類似陣列的形式進行儲存,因此它的隨機訪問速度極快,而LinkedList的內部實現是連結串列,它適合於在連結串列中間需要頻繁進行插入和刪除操作。在具體應用時可以根據需要自由選擇。前面說的Iterator只能對容器進行向前遍歷,而 ListIterator則繼承了Iterator的思想,並提供了對List進行雙向遍歷的方法。
Set介面也是 Collection的一種擴充套件,而與List不同的時,在Set中的物件元素不能重複,也就是說你不能把同樣的東西兩次放入同一個Set容器中。它的常用具體實現有HashSet和TreeSet類。HashSet能快速定位一個元素,但是你放到HashSet中的物件需要實現hashCode()方法,它使用了前面說過的雜湊碼的演算法。而TreeSet則將放入其中的元素按序存放,這就要求你放入其中的物件是可排序的,這就用到了集合框架提供的另外兩個實用類Comparable和Comparator。一個類是可排序的,它就應該實現Comparable介面。有時多個類具有相同的排序演算法,那就不需要在每分別重複定義相同的排序演算法,只要實現Comparator介面即可。集合框架中還有兩個很實用的公用類:Collections和
Arrays。Collections提供了對一個Collection容器進行諸如排序、複製、查詢和填充等一些非常有用的方法,Arrays則是對一個陣列進行類似的操作。
Map是一種把鍵物件和值物件進行關聯的容器,而一個值物件又可以是一個Map,依次類推,這樣就可形成一個多級對映。對於鍵物件來說,像Set一樣,一個Map容器中的鍵物件不允許重複,這是為了保持查詢結果的一致性;如果有兩個鍵物件一樣,那你想得到那個鍵物件所對應的值物件時就有問題了,可能你得到的並不是你想的那個值物件,結果會造成混亂,所以鍵的唯一性很重要,也是符合集合的性質的。當然在使用過程中,某個鍵所對應的值物件可能會發生變化,這時會按照最後一次修改的值物件與鍵對應。對於值物件則沒有唯一性的要求。你可以將任意多個鍵都對映到一個值物件上,這不會發生任何問題(不過對你的使用卻可能會造成不便,你不知道你得到的到底是那一個鍵所對應的值物件)。Map有兩種比較常用的實現:
HashMap和TreeMap。HashMap也用到了雜湊碼的演算法,以便快速查詢一個鍵,TreeMap則是對鍵按序存放,因此它便有一些擴充套件的方法,比如firstKey(),lastKey()等,你還可以從TreeMap中指定一個範圍以取得其子Map。鍵和值的關聯很簡單,用pub (Object key,Object value)方法即可將一個鍵與一個值物件相關聯。用get(Object key)可得到與此key物件所對應的值物件。
相關文章
- HashMap、HashTable、ConcurrentHashMap的區別HashMap
- C#中Hashtable和HashMap的區別C#HashMap
- java複習之HashMap和Hashtable的區別JavaHashMap
- HashMap、Hashtable、ConcurrentHashMap的原理與區別HashMap
- 集合類HashMap,HashTable,ConcurrentHashMap區別?HashMap
- HashMap底層實現原理/HashMap與HashTable區別/HashMap與HashSet區別HashMap
- Hashtable和HashMapHashMap
- HashTable、ConcurrentHashMap、TreeMap、HashMap關於鍵值的區別HashMap
- 10分鐘掌握ConcurrentHashMap 3分鐘清楚和HashMap、Hashtable的區別HashMap
- 五分鐘看懂Hashtable原始碼以及與HashMap的區別原始碼HashMap
- Java集合詳解4:一文讀懂HashMap和HashTable的區別以及常見面試題JavaHashMap面試題
- Java集合系列(四):HashMap、Hashtable、LinkedHashMap、TreeMap的使用方法及區別JavaHashMap
- HashTable與ConcurrentHashMap的區別HashMap
- DeFi和CeFi的區別詳細講解
- HashMap稍微詳細的理解HashMap
- 【java】【Map】HashMap、Hashtable、CollectionsJavaHashMap
- 三,TreeMap和HashMap,TreeSet和HashMap的區別以及方法使用上的不同HashMap
- 一文讀懂JDK7,8,9的hashmap,hashtable,concurrenthashmap及他們的區別JDKHashMap
- HashMap、LinkedHashMap、HashTable、HashSet筆記HashMap筆記
- HashSet與HashMap的區別HashMap
- CreateThread()與beginthread()的區別詳細解析thread
- Hashtable/HashMap與key/value為null的關係HashMapNull
- Flask框架和Django框架有什麼區別?詳細分析!Flask框架Django
- 一文讀懂JDK1.7,JDK1.8,JDK1.9的hashmap,hashtable,concurrenthashmap及他們的區別JDKHashMap
- JavaScript中的new map()和new set()使用詳細(new map()和new set()的區別)JavaScript
- 詳細介紹PPTP、L2TP、IPSec、OpenVPN和SSTP的區別pptp
- 雲平臺和雲管平臺的三大區別詳細解析
- MyBatis中#{}和${}的區別詳解MyBatis
- JRE 和 JDK 的區別詳解JDK
- HashMap為何執行緒不安全?HashMap,HashTable,ConcurrentHashMap對比HashMap執行緒
- Java中HashMap,LinkedHashMap,TreeMap的區別[轉]JavaHashMap
- 細說紛紜——Redis 和 Memcached 的區別Redis
- cookie和session的詳解與區別CookieSession
- 高可用和負載均衡的三大區別詳細講解-行雲管家負載
- linux是什麼作業系統 linux和windows的區別詳細說明Linux作業系統Windows
- 細說new和malloc的十大區別
- HashSet/HashMap、TreeSet/TreeMap、LinkedHashSet/LinkedHashMap 區別HashMap
- Python中none和null的區別詳解!PythonNoneNull
- rem與em的使用和區別詳解REM