Java中的Map集合簡單匯總解析
Map接口簡介
Map接口是一種雙列集合,它的每個(gè)元素都包含一個(gè)鍵對象Key和值對象Value,鍵和值對象之間存在一種對應(yīng)關(guān)系,稱為映射。從Map集合中訪問元素時(shí),只要指定了Key,就能找到對應(yīng)的Value,
Map中的鍵必須是唯一的,不能重復(fù),如果存儲了相同的鍵,后存儲的值會(huì)覆蓋原有的值,簡而言之就是鍵相同,值覆蓋。
Map常用方法
put(K key, V value) 添加數(shù)據(jù),如果先前包含該鍵的映射,則替換舊值 get(Object key) 返回指定鍵所映射的值 Set<Map.Entry<K,V>> entrySet() 返回地址中包含的映射的Set集合 Set<K> keySet() 返回集合中包含的鍵的Set集合 Collection<V> values() 返回集合中包含的值的Collection集合 remove(Object key) 從該集合中刪除指定鍵的映射
HashMap集合
HashMap集合是Map接口的一個(gè)是實(shí)現(xiàn)類,它用于存儲鍵值映射關(guān)系,但必須保證不出現(xiàn)重復(fù)的鍵。接下來通過一個(gè)案例來學(xué)習(xí)HashMap的用法
public class Example01 { public static void main(String[] args) { Map map = new HashMap(); map.put("1", "老大"); map.put("2", "老二"); map.put("3", "老三"); System.out.println("1"+" : "+map.get("1")); //根據(jù)鍵獲取值 System.out.println("2"+" : "+map.get("2")); System.out.println("3"+" : "+map.get("3")); } }
在Map中還提供了一個(gè)values()方法,通過這個(gè)方法可以直接獲取Map中存儲所有值的Collection集合。接下來通過一個(gè)案例來演示values()方法的使用
public class Example04 { public static void main(String[] args) { Map map = new HashMap(); map.put("1", "老大"); map.put("2", "老二"); map.put("3", "老三"); Collection values = map.values(); Iterator it = values.iterator(); while(it.hasNext()) { Object value = it.next(); System.out.println(value); } } }
在程序開發(fā)中,經(jīng)常需要取出Map中所有的鍵和值,那么如何遍歷Map中所有的鍵和值呢?
第一種方法是先遍歷Map集合中所有的鍵,再根據(jù)鍵獲取相同的值
public class Example02 { public static void main(String[] args) { Map map = new HashMap(); map.put("1", "老大"); map.put("2", "老二"); map.put("3", "老三"); Set keySet = map.keySet(); //獲取鍵的集合 Iterator it = keySet.iterator(); //迭代鍵的集合 while(it.hasNext()) { Object key = it.next(); Object value = map.get(key); //獲取每個(gè)鍵所對應(yīng)的值 System.out.println(key+" : "+value); } } }
第二種方法是先獲取集合中的所有的映射關(guān)系,然后從映射關(guān)系中取出鍵和值。
public class Example03 { public static void main(String[] args) { Map map = new HashMap(); map.put("1", "老大"); map.put("2", "老二"); map.put("3", "老三"); Set set = map.entrySet(); Iterator it = set.iterator(); //獲取迭代器對象 while(it.hasNext()) { Map.Entry entry = (Map.Entry) it.next(); //獲取集合中鍵值對映射 Object key = entry.getKey(); //獲取Entry中的鍵 Object value = entry.getValue(); //獲取Entry中的值 System.out.println(key+" : "+value); } } }
HashMap集合迭代出來元素的順序和存入的順序是不一致的。如果想讓這兩個(gè)順序一致,可以使用Java中提供的LinkedHashMap類,它是HashMap的子類,與LinkedList一樣,它也使用雙向鏈表來維護(hù)內(nèi)部元素的關(guān)系,使Map元素迭代的順序與存入的順序一致。
通過一個(gè)案例來學(xué)習(xí)LinkedHashMap的用法
public class Example05 { public static void main(String[] args) { Map map = new LinkedHashMap(); //創(chuàng)建Map集合 map.put("1", "老大"); //存儲鍵和值 map.put("2", "老二"); map.put("3", "老三"); Set keySet = map.keySet(); Iterator it = keySet.iterator(); while(it.hasNext()) { Object key = it.next(); Object value = map.get(key); //獲取每個(gè)鍵所對應(yīng)的值 System.out.println(key+" : "+value); } } }
Properties集合
Map接口中還有一個(gè)實(shí)現(xiàn)類Hashtable,它和HashMap十份相似,區(qū)別在于Hashtable是線程安全的。Hashtable存取于元素時(shí)速度很慢,目前基本上被HashMap類所取代,但Hashtable類有一個(gè)子類Properties,在實(shí)際應(yīng)用中非常重要
Properties只要用于存儲字符串類型的鍵和值,在實(shí)際開發(fā)中,經(jīng)常使用Properties集合來存取應(yīng)用的配置項(xiàng)。假設(shè)有一個(gè)文本編輯工具,要求默認(rèn)背景是紅色,字體大小為14px,語言為中文,其位置如下
Backgroup-color = red Font-size = 14px Language = chinese
在程序中可以使用Properties集合對這些配置進(jìn)行存取,接下來通過一個(gè)案例來學(xué)習(xí)Properties集合的使用
public class Example06 { public static void main(String[] args) { Properties p = new Properties(); //創(chuàng)建Properties對象 p.setProperty("Backgroup-color", "red"); p.setProperty("Font-size ", "14px"); p.setProperty("Language", "chinese"); Enumeration names = p.propertyNames(); while(names.hasMoreElements()) { //循環(huán)遍歷所有的鍵 String key =(String) names.nextElement(); String value = p.getProperty(key); //或獲取鍵對應(yīng)的值 System.out.println(key+" = "+value); } } }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Java NumberFormat 類的詳解及實(shí)例
這篇文章主要介紹了Java NumberFormat 類的詳解及實(shí)例的相關(guān)資料,數(shù)字格式化類按照本地風(fēng)格習(xí)慣進(jìn)行的數(shù)字顯示,需要的朋友可以參考下2017-08-08java實(shí)現(xiàn)隨機(jī)森林RandomForest的示例代碼
本篇文章主要介紹了java實(shí)現(xiàn)隨機(jī)森林RandomForest的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-08-08SpringBoot JPA懶加載失效的解決方案(親測有效)
這篇文章主要介紹了SpringBoot JPA懶加載失效的解決方案(親測有效),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-08-08Java實(shí)現(xiàn)定時(shí)任務(wù)最簡單的3種方法
幾乎在所有的項(xiàng)目中,定時(shí)任務(wù)的使用都是不可或缺的,如果使用不當(dāng)甚至?xí)斐少Y損,下面這篇文章主要給大家介紹了關(guān)于Java實(shí)現(xiàn)定時(shí)任務(wù)最簡單的3種方法,本文通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06圖解Eclipse j2ee開發(fā)環(huán)境的搭建過程
這篇文章以圖文結(jié)合的方式介紹了Eclipse j2ee開發(fā)環(huán)境的搭建過程,內(nèi)容很詳細(xì),每一個(gè)步驟都有對應(yīng)的操作截圖,需要的朋友可以參考下2015-08-08詳解eclipse項(xiàng)目中的.classpath文件原理
這篇文章介紹了eclipse項(xiàng)目中的.classpath文件的原理,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12Java實(shí)戰(zhàn)之在線寄查快遞系統(tǒng)的實(shí)現(xiàn)
這篇文章主要介紹了如何利用Java制作一個(gè)在線寄查快遞系統(tǒng),文中采用的技術(shù)有java、SpringBoot、FreeMarker、Mysql,需要的可以參考一下2022-02-02Java 內(nèi)存模型中的happen-before關(guān)系詳解
這篇文章主要為大家介紹了Java 內(nèi)存模型中的happen-before關(guān)系示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10