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的區別HashMap
- HashMap和Hashtable的區別HashMap
- Hashtable和HashMap的區別HashMap
- 集合框架-HashMap和Hashtable的區別框架HashMap
- 關於HashMap和Hashtable的區別HashMap
- HashTable和HashMap的六點區別HashMap
- HashMap 與HashTable的區別HashMap
- C#中Hashtable和HashMap的區別C#HashMap
- HashMap、HashTable、ConcurrentHashMap的區別HashMap
- java複習之HashMap和Hashtable的區別JavaHashMap
- Java入門:Hashtable和HashMap的區別(轉)JavaHashMap
- ConcurrentHashMap HashMap HashTable區別HashMap
- HashTable HashMap HashSet區別(java)HashMapJava
- HashMap、TreeMap、Hashtable、HashSet和ConcurrentHashMap區別HashMap
- HashMap底層實現原理/HashMap與HashTable區別/HashMap與HashSet區別HashMap
- HashMap、Hashtable、ConcurrentHashMap的原理與區別HashMap
- 集合類HashMap,HashTable,ConcurrentHashMap區別?HashMap
- Java的JDK下Hashtable與HashMap的區別JavaJDKHashMap
- hashmap與hashtable的區別,以及實現hashmap的同步操作HashMap
- Java入門學習- 理解List和HashMap和HashTable的用法和區別JavaHashMap
- HashMap、HashTable、HashSet詳解HashMap
- HashTable、ConcurrentHashMap、TreeMap、HashMap關於鍵值的區別HashMap
- Java集合面試題(03) Java中HashMap和HashTable之間區別Java面試題HashMap
- Java集合詳解4:一文讀懂HashMap和HashTable的區別以及常見面試題JavaHashMap面試題
- 五分鐘看懂Hashtable原始碼以及與HashMap的區別原始碼HashMap
- 10分鐘掌握ConcurrentHashMap 3分鐘清楚和HashMap、Hashtable的區別HashMap
- Java中的HashMap和HashTable到底哪不同?JavaHashMap
- Java集合系列(四):HashMap、Hashtable、LinkedHashMap、TreeMap的使用方法及區別JavaHashMap
- DeFi和CeFi的區別詳細講解
- typedef和define具體的詳細區別
- HashMap稍微詳細的理解HashMap
- HashTable與ConcurrentHashMap的區別HashMap
- ConcurrentHashMap和HashMap的一點區別HashMap
- 【java】【Map】HashMap、Hashtable、CollectionsJavaHashMap
- Java8改進的HashMap和Hashtable實現類JavaHashMap
- HashSet與HashMap的區別HashMap
- EXT2和EXT3的詳細區別(轉)
- 一文讀懂JDK7,8,9的hashmap,hashtable,concurrenthashmap及他們的區別JDKHashMap