Java集合類之Map集合的特點及使用詳解
1、Map集合概述和使用
1.1 Map集合概述
java.util
接口 Map<K,V>
類型參數(shù):
K - 此映射所維護的鍵的類型
V - 映射值的類型
public interface Map<K,V>
將鍵映射到值的對象。一個映射不能包含重復(fù)的鍵;每個鍵最多只能映射到一個值。
此接口取代 Dictionary 類,后者完全是一個抽象類,而不是一個接口。
Map 是一種鍵-值對(key-value)集合,Map 集合中的每一個元素都包含一個鍵對象和一個值對象。其中,鍵對象不允許重復(fù),而值對象可以重復(fù),并且值對象還可以是 Map 類型的,就像數(shù)組中的元素還可以是數(shù)組一樣。
Map 接口主要有兩個實現(xiàn)類:HashMap 類和 TreeMap 類。其中,HashMap 類按哈希算法來存取鍵對象,而 TreeMap 類可以對鍵對象進行排序。
Map 接口提供三種collection 視圖,允許以鍵集、值集或鍵-值映射關(guān)系集的形式查看某個映射的內(nèi)容。映射順序 定義為迭代器在映射的 collection 視圖上返回其元素的順序。某些映射實現(xiàn)可明確保證其順序,如 TreeMap 類;另一些映射實現(xiàn)則不保證順序,如HashMap 類。
注:將可變對象用作映射鍵時必須格外小心。當對象是映射中某個鍵時,如果以影響 equals 比較的方式更改了對象的值,則映射的行為將是不確定的。此項禁止的一種特殊情況是不允許某個映射將自身作為一個鍵包含。雖然允許某個映射將自身作為值包含,但請格外小心:在這樣的映射上equals 和 hashCode 方法的定義將不再是明確的。
1.2 Map集合常用方法
方法 | 說明 |
---|---|
boolean equals(Object o) | 比較指定的對象與此映射是否相等 |
V get(Object key) | 返回指定鍵所映射的值;如果此映射不包含該鍵的映射關(guān)系,則返回 null |
V put(K key, V value) | 將指定的值與此映射中的指定鍵關(guān)聯(lián)(可選操作) |
void clear() | 從此映射中移除所有映射關(guān)系(可選操作) |
boolean containsKey(Object key) | 如果此映射包含指定鍵的映射關(guān)系,則返回 true |
boolean containsValue(Object value) | 如果此映射將一個或多個鍵映射到指定值,則返回 true |
boolean isEmpty() | 如果此映射未包含鍵-值映射關(guān)系,則返回 true |
V get(Object key) | 返回指定鍵所映射的值;如果此映射不包含該鍵的映射關(guān)系,則返回 null |
Set keySet() | 返回此映射中包含的鍵的 Set 視圖 |
Set<Map.Entry<K,V>> entrySet() | 返回此映射中包含的映射關(guān)系的 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) { //創(chuàng)建集合對象 Map<String,String> map = new HashMap<String,String>(); //往集合添加元素 map.put("2101","zhangxiaohau"); map.put("2102","wangxiaoer"); map.put("2103","liuyidao"); //根據(jù)鍵刪除對應(yīng)元素 // System.out.println(map.remove("2102"));//wangxiaoer // System.out.println(map.remove("2105"));//null //移除所有鍵值對元素 //map.clear();//{} // boolean containsKey(Object key) // 如果此映射包含指定鍵的映射關(guān)系,則返回 true。 System.out.println(map.containsKey("2101"));//true // boolean containsValue(Object value) // 如果此映射將一個或多個鍵映射到指定值,則返回 true。 System.out.println(map.containsValue("liuyidao"));//true //boolean isEmpty() |如果此映射未包含鍵-值映射關(guān)系,則返回 true。 System.out.println(map.isEmpty());//false System.out.println(map.size());//3 // V get(Object key) 返回指定鍵所映射的值;如果此映射不包含該鍵的映射關(guān)系,則返回 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);// } }
總結(jié):Map 接口中鍵和值一一映射. 可以通過鍵來獲取值。
給定一個鍵和一個值,你可以將該值存儲在一個 Map 對象。之后,你可以通過鍵來訪問對應(yīng)的值。
當訪問的值不存在的時候,方法就會拋出一個 NoSuchElementException 異常。
當對象的類型和 Map 里元素類型不兼容的時候,就會拋出一個 ClassCastException 異常。
當在不允許使用 Null 對象的 Map 中使用 Null 對象,會拋出一個 NullPointerException 異常。
當嘗試修改一個只讀的 Map 時,會拋出一個 UnsupportedOperationException 異常。
1.3 Map集合的遍歷
方法一:
操作:
- 獲取所有鍵的集合,用keySet()方法實現(xiàn)
- 遍歷鍵的集合,獲取到每一個鍵,用增強for實現(xiàn)
- 根據(jù)鍵去找值。用get(Object key)方法實現(xiàn)
代碼示例:
package com.ithmm_01; /** * - 獲取所有鍵的集合,用keySet()方法實現(xiàn) * - 遍歷鍵的集合,獲取到每一個鍵,用增強for實現(xiàn) * - 根據(jù)鍵去找值。用get(Object key)方法實現(xiàn) */ import java.util.HashMap; import java.util.Map; import java.util.Set; public class MapDemo02 { public static void main(String[] args) { //創(chuàng)建集合對象 Map<String, String> map = new HashMap<String, String>(); //往集合添加元素 map.put("2101", "zhangxiaohau"); map.put("2102", "wangxiaoer"); map.put("2103", "liuyidao"); //獲取所有鍵的集合,用keySet()方法實現(xiàn) Set<String> keySet = map.keySet(); //遍歷鍵的集合,獲取到每一個鍵,用增強for實現(xiàn) for (String key :keySet){ // 根據(jù)鍵去找值。用get(Object key)方法實現(xiàn) String value = map.get(key); System.out.println(key + "," +value); } } }
控制臺輸出:
2103,liuyidao
2102,wangxiaoer
2101,zhangxiaohau
方法二:
操作:
1.獲取所有鍵值對對象的集合
Set<Map.Entry<K,V>> entrySet()返回此映射中包含的映射關(guān)系的 Set 視圖。
2.遍歷鍵值對對象的集合,得到每一個鍵值對對象
用增強for實現(xiàn),得到每一個Map.Entry
3.根據(jù)鍵值對對象獲取鍵和值
用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) { //創(chuàng)建集合對象 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實現(xiàn),得到每一個Map.Entry for (Map.Entry<String, String> ss : entrySet) { //根據(jù)鍵值對對象獲取鍵和值 String key = ss.getKey(); String value = ss.getValue(); System.out.println(key + "," + value); } } }
控制臺輸出:
2103,liuyidao
2102,wangxiaoer
2101,zhangxiaohau
到此這篇關(guān)于Java集合類之Map集合的特點及使用詳解的文章就介紹到這了,更多相關(guān)Java Map集合內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Spring?BeanFactory?與?FactoryBean?的區(qū)別詳情
這篇文章主要介紹了Spring?BeanFactory?與?FactoryBean?的區(qū)別詳情,BeanFactory?和?FactoryBean?的區(qū)別卻是一個很重要的知識點,在本文中將結(jié)合源碼進行分析講解,需要的小伙伴可以參考一下2022-05-05springboot集成@DS注解實現(xiàn)數(shù)據(jù)源切換的方法示例
本文主要介紹了springboot集成@DS注解實現(xiàn)數(shù)據(jù)源切換的方法示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03RestTemplate使用之如何設(shè)置請求頭、請求體
這篇文章主要介紹了RestTemplate使用之如何設(shè)置請求頭、請求體問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07Java 在Word中創(chuàng)建郵件合并模板并合并文本和圖片的操作方法
通過Java程序展示如何來實現(xiàn)創(chuàng)建模板,并通過郵件合并功能來合并文本數(shù)據(jù)和圖片數(shù)據(jù)的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2021-07-07