1. 程式人生 > 實用技巧 >java筆記--Map的用法

java筆記--Map的用法

轉載:https://blog.csdn.net/qq_29373285/article/details/81487594

Map

介面概述

我們通過檢視Map介面描述,發現Map介面下的集合與Collection介面下的集合,它們儲存資料的形式不同,如下圖。

  • Collection中的集合,元素是孤立存在的(理解為單身),向集合中儲存元素採用一個個元素的方式儲存。

  • Map中的集合,元素是成對存在的(理解為夫妻)。每個元素由鍵與值兩部分組成,通過鍵可以找對所對應的值。

  • Collection中的集合稱為單列集合,Map中的集合稱為雙列集合。

  • 需要注意的是,Map中的集合不能包含重複的鍵,值可以重複;每個鍵只能對應一個值。

  • Map中常用的集合為HashMap集合、LinkedHashMap集合。

Map介面中常用集合概述

通過檢視Map介面描述,看到Map有多個子類,這裡我們主要講解常用的HashMap集合、LinkedHashMap集合。

  • HashMap<K,V>:儲存資料採用的雜湊表結構,元素的存取順序不能保證一致。由於要保證鍵的唯一、不重複,需要重寫鍵的hashCode()方法、equals()方法。

  • LinkedHashMap<K,V>:HashMap下有個子類LinkedHashMap,儲存資料採用的雜湊表結構+連結串列結構。通過連結串列結構可以保證元素的存取順序一致;通過雜湊表結構可以保證的鍵的唯一、不重複,需要重寫鍵的hashCode()方法、equals()方法。

  • 注意:Map介面中的集合都有兩個泛型變數<K,V>,在使用時,要為兩個泛型變數賦予資料型別。兩個泛型變數<K,V>的資料型別可以相同,也可以不同。

Map介面中的常用方法

沒有,則沒有這個鍵對應的值,返回null,並把指定的鍵值新增到集合中;

使用put方法時,若指定的鍵(key)在集合中存在,則返回值為集合中鍵對應的值(該值為替換前的值),並把指定鍵所對應的值,替換成指定的新值。

  • get方法:獲取指定鍵(key)所對應的值(value)

  • put方法:將指定的鍵與值對應起來,並新增到集合中

方法返回值為鍵所對應的值

使用put方法時,若指定的鍵(key)在集合中

  • remove方法:根據指定的鍵(key)刪除元素,返回被刪除元素的值(value)。

Map介面的方法演示

  1. public class MapDemo {
  2. public static void main(String[] args) {
  3. //建立Map物件
  4. Map<String, String> map = new HashMap<String,String>(); //資料採用的雜湊表結構
  5. //給map中新增元素
  6. map.put("星期一", "Monday");
  7. map.put("星期日", "Sunday");
  8. System.out.println(map); // {星期日=Sunday, 星期一=Monday}
  9. //當給Map中新增元素,會返回key對應的原來的value值,若key沒有對應的值,返回null
  10. System.out.println(map.put("星期一", "Mon")); // Monday
  11. System.out.println(map); // {星期日=Sunday, 星期一=Mon}
  12. //根據指定的key獲取對應的value
  13. String en = map.get("星期日");
  14. System.out.println(en); // Sunday
  15. //根據key刪除元素,會返回key對應的value值
  16. String value = map.remove("星期日");
  17. System.out.println(value); // Sunday
  18. System.out.println(map); // {星期一=Mon}
  19. }
  20. }

Map集合遍歷鍵找值方式

鍵找值方式:即通過元素中的鍵,獲取鍵所對應的值

操作步驟與圖解:

1.獲取Map集合中所有的鍵,由於鍵是唯一的,所以返回一個Set集合儲存所有的鍵

2.遍歷鍵的Set集合,得到每一個鍵

3.根據鍵,獲取鍵所對應的值

程式碼演示: //利用了迭代器Iterator (點此瞭解迭代器

Map集合遍歷鍵值對方式

    public class MapDemo {
    public static void main(String[] args) {
    //建立Map物件
    Map<String, String> map = new HashMap<String,String>();
    //給map中新增元素
    map.put("鄧超", "孫儷");
    map.put("李晨", "范冰冰");
    map.put("劉德華", "柳巖");
    //獲取Map中的所有key
    Set<String> keySet = map.keySet();
    //遍歷存放所有key的Set集合
    Iterator<String> it =keySet.iterator(); **
    while(it.hasNext()){ //利用了Iterator迭代器**
    //得到每一個key
    String key = it.next();
    //通過key獲取對應的value
    String value = map.get(key);
    System.out.println(key+"="+value);
    }
    }
    }

鍵值對方式:即通過集合中每個鍵值對(Entry)物件,獲取鍵值對(Entry)物件中的鍵與值。

操作步驟與圖解:

1.獲取Map集合中,所有的鍵值對(Entry)物件,以Set集合形式返回。

2.遍歷包含鍵值對(Entry)物件的Set集合,得到每一個鍵值對(Entry)物件

3.通過鍵值對(Entry)物件,獲取Entry物件中的鍵與值。

注意:Map集合不能直接使用迭代器或者foreach進行遍歷。但是轉成Set之後就可以使用了。

    public class MapDemo {
    public static void main(String[] args) {
    //建立Map物件
    Map<String, String> map = new HashMap<String,String>();
    //給map中新增元素
    map.put("鄧超", "孫儷");
    map.put("李晨", "范冰冰");
    map.put("劉德華", "柳巖");
    //獲取Map中的所有key與value的對應關係
    Set<Map.Entry<String,String>> entrySet = map.entrySet();
    //遍歷Set集合
    Iterator<Map.Entry<String,String>> it =entrySet.iterator();
    while(it.hasNext()){
    //得到每一對對應關係
    Map.Entry<String,String> entry = it.next();
    //通過每一對對應關係獲取對應的key
    String key = entry.getKey();
    //通過每一對對應關係獲取對應的value
    String value = entry.getValue();
    System.out.println(key+"="+value);
    }
    }
    }


下面轉載自來自一個Map的用法例子:

    //假設key 為Integer型 value 為String ,具體自行定義
    Map<Integer,String> map = new HashMap<Integer,String>();

 放入資料

     
    map.put(1,"a");
    map.put(2,"b");
    map.put(3,"c");

根據key獲取對應的value

map.get(1); //獲取到對應key=1時的value=a

遍歷方法1:keyset遍歷

    Iterator<String> iter = map.keySet().iterator();
     
    while (iter.hasNext()) {
     
    int key = iter.next();
     
    String value = map.get(key);
    }
     
    ————————————————————————————————————————————
     
    //還有一種寫法 用for each
    for (String key : map.keySet()) {
    String value = map.get(key);
    }

遍歷方法2:

    Iterator<Entry<String, String>> iter = map.entrySet().iterator();
     
    Entry<String, String> entry;
     
    while (iter.hasNext()) {
     
    entry = iter.next();
     
    int key = entry.getKey();
     
    String value = entry.getValue();
     
    }

    //同樣的for each寫法
    for (Entry<String, String> entry: map.entrySet()) {
     
    int key = entry.getKey();
     
    String value = entry.getValue();
     
    }

另外,在考慮效率方面,for each速度更快一點點,推薦使用for each寫法來遍歷。