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