Java集合類之Map集合的特點及使用詳解

1、Map集合概述和使用

1.1 Map集合概述

java.util
接口 Map<K,V>

類型參數:

K – 此映射所維護的鍵的類型

V – 映射值的類型

public interface Map<K,V>

將鍵映射到值的對象。一個映射不能包含重復的鍵;每個鍵最多隻能映射到一個值。

此接口取代 Dictionary 類,後者完全是一個抽象類,而不是一個接口。

Map 是一種鍵-值對(key-value)集合,Map 集合中的每一個元素都包含一個鍵對象和一個值對象。其中,鍵對象不允許重復,而值對象可以重復,並且值對象還可以是 Map 類型的,就像數組中的元素還可以是數組一樣。

Map 接口主要有兩個實現類:HashMap 類和 TreeMap 類。其中,HashMap 類按哈希算法來存取鍵對象,而 TreeMap 類可以對鍵對象進行排序。

Map 接口提供三種collection 視圖,允許以鍵集、值集或鍵-值映射關系集的形式查看某個映射的內容。映射順序 定義為迭代器在映射的 collection 視圖上返回其元素的順序。某些映射實現可明確保證其順序,如 TreeMap 類;另一些映射實現則不保證順序,如HashMap 類。

註:將可變對象用作映射鍵時必須格外小心。當對象是映射中某個鍵時,如果以影響 equals 比較的方式更改瞭對象的值,則映射的行為將是不確定的。此項禁止的一種特殊情況是不允許某個映射將自身作為一個鍵包含。雖然允許某個映射將自身作為值包含,但請格外小心:在這樣的映射上equals 和 hashCode 方法的定義將不再是明確的。

1.2 Map集合常用方法

方法 說明
boolean equals(Object o) 比較指定的對象與此映射是否相等
V get(Object key) 返回指定鍵所映射的值;如果此映射不包含該鍵的映射關系,則返回 null
V put(K key, V value) 將指定的值與此映射中的指定鍵關聯(可選操作)
void clear() 從此映射中移除所有映射關系(可選操作)
boolean containsKey(Object key) 如果此映射包含指定鍵的映射關系,則返回 true
boolean containsValue(Object value) 如果此映射將一個或多個鍵映射到指定值,則返回 true
boolean isEmpty() 如果此映射未包含鍵-值映射關系,則返回 true
V get(Object key) 返回指定鍵所映射的值;如果此映射不包含該鍵的映射關系,則返回 null
Set keySet() 返回此映射中包含的鍵的 Set 視圖
Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射關系的 Set 視圖

代碼示例:

import java.util.*;

public class CollectionsDemo {

   public static void main(String[] args) {
      Map m1 = new HashMap(); 
      m1.put("Zara", "8");
      m1.put("Mahnaz", "31");
      m1.put("Ayan", "12");
      m1.put("Daisy", "14");
      System.out.println();
      System.out.println(" Map Elements");
      System.out.print("\t" + m1);
   }
}
package com.ithmm_01;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

public class MapDemo01 {
    public static void main(String[] args) {
        //創建集合對象
        Map<String,String> map = new HashMap<String,String>();

        //往集合添加元素
        map.put("2101","zhangxiaohau");
        map.put("2102","wangxiaoer");
        map.put("2103","liuyidao");


        //根據鍵刪除對應元素
//        System.out.println(map.remove("2102"));//wangxiaoer
//        System.out.println(map.remove("2105"));//null

        //移除所有鍵值對元素
        //map.clear();//{}

        // boolean containsKey(Object key)
        //          如果此映射包含指定鍵的映射關系,則返回 true。

        System.out.println(map.containsKey("2101"));//true
        // boolean containsValue(Object value)
        //          如果此映射將一個或多個鍵映射到指定值,則返回 true。
        System.out.println(map.containsValue("liuyidao"));//true

        //boolean isEmpty() |如果此映射未包含鍵-值映射關系,則返回 true。
        System.out.println(map.isEmpty());//false

        System.out.println(map.size());//3

//        V get(Object key)	返回指定鍵所映射的值;如果此映射不包含該鍵的映射關系,則返回 null。
        System.out.println(map.get("2101"));//zhangxiaohau

        System.out.println(map.get("2102")); //wangxiaoer


//        Set keySet()	返回此映射中包含的鍵的 Set 視圖。
        System.out.println(map.keySet());//3[2103, 2102, 2101]

//        Collection<V> values()
//        返回此映射中包含的值的 Collection 視圖。
        Collection<String> values = map.values();
        for(String value : values){
            System.out.println(value);//liuyidao  wangxiaoer  zhangxiaohau

        }
        //輸出集合對象
        System.out.println(map);//


    }
}

總結:Map 接口中鍵和值一一映射. 可以通過鍵來獲取值。

給定一個鍵和一個值,你可以將該值存儲在一個 Map 對象。之後,你可以通過鍵來訪問對應的值。

當訪問的值不存在的時候,方法就會拋出一個 NoSuchElementException 異常。

當對象的類型和 Map 裡元素類型不兼容的時候,就會拋出一個 ClassCastException 異常。

當在不允許使用 Null 對象的 Map 中使用 Null 對象,會拋出一個 NullPointerException 異常。

當嘗試修改一個隻讀的 Map 時,會拋出一個 UnsupportedOperationException 異常。

1.3 Map集合的遍歷

方法一:

操作:

  • 獲取所有鍵的集合,用keySet()方法實現
  • 遍歷鍵的集合,獲取到每一個鍵,用增強for實現
  • 根據鍵去找值。用get(Object key)方法實現

代碼示例:

package com.ithmm_01;
/**
 *  - 獲取所有鍵的集合,用keySet()方法實現
 *  - 遍歷鍵的集合,獲取到每一個鍵,用增強for實現
 *  - 根據鍵去找值。用get(Object key)方法實現
 */

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo02 {
    public static void main(String[] args) {
        //創建集合對象
        Map<String, String> map = new HashMap<String, String>();

        //往集合添加元素
        map.put("2101", "zhangxiaohau");
        map.put("2102", "wangxiaoer");
        map.put("2103", "liuyidao");

        //獲取所有鍵的集合,用keySet()方法實現
        Set<String> keySet = map.keySet();

        //遍歷鍵的集合,獲取到每一個鍵,用增強for實現
        for (String key :keySet){
            // 根據鍵去找值。用get(Object key)方法實現
            String value = map.get(key);
            System.out.println(key + "," +value);
        }

    }
}

控制臺輸出:

2103,liuyidao
2102,wangxiaoer
2101,zhangxiaohau

方法二:

操作:

1.獲取所有鍵值對對象的集合

Set<Map.Entry<K,V>> entrySet()返回此映射中包含的映射關系的 Set 視圖。

2.遍歷鍵值對對象的集合,得到每一個鍵值對對象

用增強for實現,得到每一個Map.Entry

3.根據鍵值對對象獲取鍵和值

用getKey()方法得到鍵

用getValue()方法得到值

代碼示例:

package com.ithmm_01;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class MapDemo03 {
    public static void main(String[] args) {
        //創建集合對象
        Map<String, String> map = new HashMap<String, String>();

        //往集合添加元素
        map.put("2101", "zhangxiaohau");
        map.put("2102", "wangxiaoer");
        map.put("2103", "liuyidao");

        //獲取所有鍵值對對象的集合
        Set<Map.Entry<String, String>> entrySet = map.entrySet();

        //遍歷鍵值對對象的集合,得到每一個鍵值對對象
        //用增強for實現,得到每一個Map.Entry
        for (Map.Entry<String, String> ss : entrySet) {
            //根據鍵值對對象獲取鍵和值
            String key = ss.getKey();
            String value = ss.getValue();

            System.out.println(key + "," + value);

        }
    }
}

控制臺輸出:

2103,liuyidao
2102,wangxiaoer
2101,zhangxiaohau

到此這篇關於Java集合類之Map集合的特點及使用詳解的文章就介紹到這瞭,更多相關Java Map集合內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: