Map介面用於儲存元素對(鍵和值)
Map介面中的方法
equals(Object o)
hashCode
clear()
remove(Object key)
put(Object key,Object value)
putAll(Map t)
entrySet 返回 Map 中所包含映射的 Set 視圖。 Set 中的每個元素都是一個 Map.Entry 對象,可以使用 getKey() 和 getValue() 方法(還有一個 setValue() 方法)訪問後者的鍵元素和值元素
keySet()返回 Map 中所包含鍵的 Set 視圖。 刪除 Set 中的元素還將刪除 Map 中相應的映射(鍵和值)
values()返回 map 中所包含值的 Collection 視圖。 刪除 Collection 中的元素還將刪除 Map 中相應的映射(鍵和值)
get(Object key)返回與指定鍵關聯的值
containsKey(Object key) true or false;
containsValue(Object value) true or false;
isEmpty()
size()
1. HashMap
HashMap提供所有可選的映射操作,並允許使用 null 值和 null 鍵,除了非同步和允許使用 null 之外,HashMap 類與 Hashtable 大致相同
注意,此實現不是同步的。如果多個線程同時訪問一個雜湊映射,而其中至少一個線程從結構上修改了該映射,則它必須 保持外部同步。這一
般通過對自然封裝該映射的對象進行同步操作來完成。如果不存在這樣的對象,則應該使用 Collections.synchronizedMap 方法來“封裝”該映射。最好在建立時完成這一操作,以防止對映射進行意外的非同步訪問,如下所示:
Map m = Collections.synchronizedMap(new HashMap(...));
A: 遍曆HashTable, 使用entrySet介面
Java代碼 {
dp.sh.Toolbar.CopyToClipboard(this);return false;
}" href="http://www.javaeye.com/topic/421014#">
- Map<String,Integer> map=new HashMap<String,Integer>();
- map.put("1", 1);
- map.put("2", 2);
- map.put("3", 3);
- map.put("3", 3);
-
- Iterator itor=map.entrySet().iterator();
- while(itor.hasNext()){
- Map.Entry<String,Integer> entry=(Map.Entry<String,Integer>)itor.next();
- System.out.println("key="+entry.getKey().toString());
- System.out.println("values="+entry.getValue().toString());
- }
Map<String,Integer> map=new HashMap<String,Integer>(); map.put("1", 1); map.put("2", 2); map.put("3", 3); map.put("3", 3); Iterator itor=map.entrySet().iterator(); while(itor.hasNext()){ Map.Entry<String,Integer> entry=(Map.Entry<String,Integer>)itor.next(); System.out.println("key="+entry.getKey().toString()); System.out.println("values="+entry.getValue().toString()); }
B: 遍曆HashTable, 使用keySet 和 values介面
Java代碼 {
dp.sh.Toolbar.CopyToClipboard(this);return false;
}" href="http://www.javaeye.com/topic/421014#">
- Set<String> keys=map.keySet();
- Iterator itor=keys.iterator();
- while(itor.hasNext()){
- Object key=itor.next();
- System.out.println("key="+key.toString());
- System.out.println("value="+map.get(key).toString());
- }
-
- Collection co=map.values();
- Iterator itor=co.iterator();
- while(itor.hasNext()){
- System.out.println("value="+itor.next());
- }
Set<String> keys=map.keySet(); Iterator itor=keys.iterator(); while(itor.hasNext()){ Object key=itor.next(); System.out.println("key="+key.toString()); System.out.println("value="+map.get(key).toString()); } Collection co=map.values(); Iterator itor=co.iterator(); while(itor.hasNext()){ System.out.println("value="+itor.next()); }
Hashtable和HashMap的區別:
1.Hashtable是Dictionary的子類,HashMap是Map介面的一個實作類別;
2.Hashtable中的方法是同步的,而HashMap中的方法在預設情況下是非同步的。即是說,在多線程應用程式中,不用專門的操作就安全地可以
使用Hashtable了;而對於HashMap,則需要額外的同步機制。但HashMap的同步問題可通過Collections的一個靜態方法得到解決:
Map Collections.synchronizedMap(Map m)
這個方法返回一個同步的Map,這個Map封裝了底層的HashMap的所有方法,使得底層的HashMap即使是在多線程的環境中也是安全的。
3.在HashMap中,null可以作為鍵,這樣的鍵只有一個;可以有一個或多個鍵所對應的值為null。當get()方法返回null值時,即可以表示
HashMap中沒有該鍵,也可以表示該鍵所對應的值為null。因此,在HashMap中不能由get()方法來判斷HashMap中是否存在某個鍵,而應該用
containsKey()方法來判斷。