詳解Java中Map用法

來源:互聯網
上載者:User

標籤: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);

詳細理解:

       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用法

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.