首頁 > 軟體

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

2022-08-29 14:01:20

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集合內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com