详解Java中Map用法
Map以按鍵/數值對的形式存儲數據,這里要特別說明(?Map.Entry,是Map的內部類,它用來描述Map中的鍵/值對)。?Map是一個接口,我們平時多用它的實現類HashMap。
用例如下:
public static void main(String args[]) { HashMap hashmap = new HashMap(); hashmap.put("Item0", "Value0"); hashmap.put("Item1", "Value1"); hashmap.put("Item2", "Value2"); hashmap.put("Item3", "Value3"); Set set = hashmap.entrySet(); Iterator iterator = set.iterator(); while (iterator.hasNext() { Map.Entry mapentry = (Map.Entry) iterator.next(); System.out.println(mapentry.getkey() + "/" + mapentry.getValue()); } }
?注意,這里Map的按鍵必須是唯一的,比如說不能有兩個按鍵都為null。當然也可以這樣,
Map<String, Order> map = new HashMap<String, Order>(); map.put("Order", (Order) obj);
幾個重要的方法特別說明:
get(Object key); ? //獲取給定key對應的值。
put(Object key,Object value); ? ?//該方法會將原先Key所對應的鍵值對覆蓋掉,即可以用該方法修改Map中的值。
containsKey(Object Key); ? //是否包含某個元素。通過配合get和put方法一起使用,來實現匹配并修改Map中的元素。
詳細理解:
?????? Collection容器中包含Set和List接口,Set中又包含HashSet,List中包含LinkedList和ArrayList;單獨的Map接口中只有HashMap。
?????? java.util 中的集合類包含?Java?中某些最常用的類。最常用的集合類是 List 和 Map。 List的具體實現包括 ArrayList和 Vector,它們是可變大小的列表,比較適合構建、存儲和操作任何類型對象的元素列表。 List適用于按數值索引訪問元素的情形,其中的數據有順序且可以重復(有順序即提供get(i)的索引方法)。而Set中數據無順序且不可以重復。
?
表 1:我們將這 Object的這兩個方法覆蓋,以正確比較 Map 對象的等價性。
| equals(Object o) | 比較指定對象與此 Map的等價性 |
| hashCode() | 返回此 Map的哈希碼 |
表 2: Map更新方法:可以更改 Map內容。
| clear() | 從 Map中刪除所有映射 |
| remove(Object key) | 從 Map中刪除鍵和關聯的值 |
| put(Object key, Object value) | 將指定值與指定鍵相關聯 |
| clear() | 從 Map中刪除所有映射 |
| putAll(Map t) | 將指定 Map中的所有映射復制到此 map |
?
重點處:遍歷Map
?????? 迭代 Map中的元素不存在直接的方法。如果要查詢某個 Map以了解其哪些元素滿足特定查詢,或如果要迭代其所有元素,則你必須首先獲取該 Map的“視圖”。共有三種視圖。
表 3:返回視圖的 Map方法。通過使用這些方法返回的對象,可以遍歷 Map中的元素,也可以刪除 Map中的元素。
| entrySet() | 返回 Map中所包含映射的 Set視圖。 Set 中的每個元素都是一個 Map.Entry對象,可以使用 getKey()和 getValue()方法(還有一個 setValue()方法)訪問后者的鍵元素和值元素 |
| keySet() | 返回 Map中所包含鍵的 Set 視圖。刪除 Set中的元素還將刪除 Map中相應的映射(鍵和值) |
| values() | 返回 map中所包含值的 Collection視圖。刪除 Collection中的元素還將刪除 Map中相應的映射(鍵和值) |
所有鍵值對 — 參見 entrySet()
所有鍵 ????— 參見 keySet()
所有值 ????— 參見 values()
?????? 前兩個視圖均返回 Set對象,第三個視圖返回 Collection對象。就這兩種情況而言,問題到這里并沒有結束,這是因為您無法直接迭代 Collection對象或 Set對象。要進行迭代,你必須獲得一個 Iterator對象。因此,要迭代 Map的元素相對麻煩,但也沒有更好的辦法。
IteratorkeyValuePairs = aMap.entrySet().iterator(); Iterator keys= aMap.keySet().iterator(); Iteratorvalues = aMap.values().iterator();表 4: Map訪問和測試方法:這些方法檢索有關 Map內容的信息但不更改 Map內容。
| get(Object key) | 返回與指定鍵關聯的值 |
| containsKey(Object key) | 如果 Map包含指定鍵的映射,則返回 true |
| containsValue(Object value) | 如果此 Map將一個或多個鍵映射到指定值,則返回 true |
| isEmpty() | 如果 Map不包含鍵-值映射,則返回 true |
| size() | 返回 Map中的鍵-值映射的數目 |
?
自己寫的用例代碼如下:
package MapUsage;import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Set;public class guo {private Map map;guo(){ // Map<Integer,String> map =new HashMap<Integer,String>();this.map =new HashMap();map.put(1, "str1");map.put(2, "str2");map.put(3, "str1");}public static void main(String[] args) {// TODO Auto-generated method stubguo guo =new guo();guo.fun1();guo.fun2();}public <E> void fun1(){ //遍歷MapSystem.out.println(map.size()); //map映射個數System.out.println(map.entrySet().getClass()); //HashMap的內部類EntrySet//map的三種視圖Set<Entry<Integer, String>> set =map.entrySet(); // Set<Integer> set_Key =map.keySet();Set<E> set_Key =(Set<E>) map.keySet();Collection<String> col_Value = map.values(); //不能返回Set,values值可能有重復Iterator<Map.Entry<Integer, String>> itera_Entry =set.iterator();Iterator itera_Key =set_Key.iterator();Iterator<String> itera_Value =col_Value.iterator();//迭代器while(itera_Entry.hasNext()){Map.Entry<Integer, String> mapEntry =itera_Entry.next();System.out.println("鍵:"+mapEntry.getKey()+" 值:"+mapEntry.getValue());}//增強for循環/*for(Integer key:set_Key){System.out.println("鍵:"+key);}*/for(E key:set_Key){System.out.println("鍵:"+key);}for(String value:col_Value){System.out.println("值:"+value);}}public Boolean fun2(){Boolean b;b =map.containsKey(5);System.out.println(b);return b;}}
?
?
?
?
?
總結
以上是生活随笔為你收集整理的详解Java中Map用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【代码示例】 一个简单的Java死锁
- 下一篇: toArray()方法使用说明