1. 程式人生 > 實用技巧 >Map用法轉載

Map用法轉載

java筆記--Map的用法

Linias 2018-08-07 20:04:39   106364   收藏 176
分類專欄: 程式語言
版權
Map


介面概述

我們通過檢視Map介面描述,發現Map介面下的集合與Collection介面下的集合,它們儲存資料的形式不同,如下圖。

Collection中的集合,元素是孤立存在的(理解為單身),向集合中儲存元素採用一個個元素的方式儲存。

Map中的集合,元素是成對存在的(理解為夫妻)。每個元素由鍵與值兩部分組成,通過鍵可以找對所對應的值。

Collection中的集合稱為單列集合,Map中的集合稱為雙列集合。

需要注意的是,Map中的集合不能包含重複的鍵,值可以重複;每個鍵只能對應一個值。

Map中常用的集合為HashMap集合、LinkedHashMap集合。



Map介面中常用集合概述

通過檢視Map介面描述,看到Map有多個子類,這裡我們主要講解常用的HashMap集合、LinkedHashMap集合。

HashMap
<K,V>:儲存資料採用的雜湊表結構,元素的存取順序不能保證一致。由於要保證鍵的唯一、不重複,需要重寫鍵的hashCode()方法、equals()方法。 LinkedHashMap<K,V>:HashMap下有個子類LinkedHashMap,儲存資料採用的雜湊表結構+連結串列結構。通過連結串列結構可以保證元素的存取順序一致;通過雜湊表結構可以保證的鍵的唯一、不重複,需要重寫鍵的hashCode()方法、equals()方法。 注意:Map介面中的集合都有兩個泛型變數<K,V>,在使用時,要為兩個泛型變數賦予資料型別。兩個泛型變數<K,V>的資料型別可以相同,也可以不同。 Map介面中的常用方法 沒有,則沒有這個鍵對應的值,返回null,並把指定的鍵值新增到集合中; 使用put方法時,若指定的鍵(key)在集合中存在,則返回值為集合中鍵對應的值(該值為替換前的值),並把指定鍵所對應的值,替換成指定的新值。 get方法:獲取指定鍵(key)所對應的值(value) put方法:將指定的鍵與值對應起來,並新增到集合中 方法返回值為鍵所對應的值 使用put方法時,若指定的鍵(key)在集合中 remove方法:根據指定的鍵(key)刪除元素,返回被刪除元素的值(value)。 Map介面的方法演示
public class MapDemo { public static void main(String[] args) { //建立Map物件 Map<String, String> map = new HashMap<String,String>(); //資料採用的雜湊表結構 //給map中新增元素 map.put("星期一", "Monday"); map.put("星期日", "Sunday"); System.out.println(map); // {星期日=Sunday, 星期一=Monday}
//當給Map中新增元素,會返回key對應的原來的value值,若key沒有對應的值,返回null System.out.println(map.put("星期一", "Mon")); // Monday System.out.println(map); // {星期日=Sunday, 星期一=Mon} //根據指定的key獲取對應的value String en = map.get("星期日"); System.out.println(en); // Sunday //根據key刪除元素,會返回key對應的value值 String value = map.remove("星期日"); System.out.println(value); // Sunday System.out.println(map); // {星期一=Mon} } } Map集合遍歷鍵找值方式 鍵找值方式:即通過元素中的鍵,獲取鍵所對應的值 操作步驟與圖解: 1.獲取Map集合中所有的鍵,由於鍵是唯一的,所以返回一個Set集合儲存所有的鍵 2.遍歷鍵的Set集合,得到每一個鍵 3.根據鍵,獲取鍵所對應的值 程式碼演示: //利用了迭代器Iterator (點此瞭解迭代器) public class MapDemo { public static void main(String[] args) { //建立Map物件 Map<String, String> map = new HashMap<String,String>(); //給map中新增元素 map.put("鄧超", "孫儷"); map.put("李晨", "范冰冰"); map.put("劉德華", "柳巖"); //獲取Map中的所有key Set<String> keySet = map.keySet(); //遍歷存放所有key的Set集合 Iterator<String> it =keySet.iterator(); ** while(it.hasNext()){ //利用了Iterator迭代器** //得到每一個key String key = it.next(); //通過key獲取對應的value String value = map.get(key); System.out.println(key+"="+value); } } } Map集合遍歷鍵值對方式 鍵值對方式:即通過集合中每個鍵值對(Entry)物件,獲取鍵值對(Entry)物件中的鍵與值。 操作步驟與圖解: 1.獲取Map集合中,所有的鍵值對(Entry)物件,以Set集合形式返回。 2.遍歷包含鍵值對(Entry)物件的Set集合,得到每一個鍵值對(Entry)物件 3.通過鍵值對(Entry)物件,獲取Entry物件中的鍵與值。 public class MapDemo { public static void main(String[] args) { //建立Map物件 Map<String, String> map = new HashMap<String,String>(); //給map中新增元素 map.put("鄧超", "孫儷"); map.put("李晨", "范冰冰"); map.put("劉德華", "柳巖"); //獲取Map中的所有key與value的對應關係 Set<Map.Entry<String,String>> entrySet = map.entrySet(); //遍歷Set集合 Iterator<Map.Entry<String,String>> it =entrySet.iterator(); while(it.hasNext()){ //得到每一對對應關係 Map.Entry<String,String> entry = it.next(); //通過每一對對應關係獲取對應的key String key = entry.getKey(); //通過每一對對應關係獲取對應的value String value = entry.getValue(); System.out.println(key+"="+value); } } } 注意:Map集合不能直接使用迭代器或者foreach進行遍歷。但是轉成Set之後就可以使用了。 下面轉載自來自一個Map的用法例子: //假設key 為Integer型 value 為String ,具體自行定義 Map<Integer,String> map = new HashMap<Integer,String>(); 放入資料 map.put(1,"a"); map.put(2,"b"); map.put(3,"c"); 根據key獲取對應的value map.get(1); //獲取到對應key=1時的value=a 遍歷方法1:keyset遍歷 Iterator<String> iter = map.keySet().iterator(); while (iter.hasNext()) { int key = iter.next(); String value = map.get(key); } ———————————————————————————————————————————— //還有一種寫法 用for each for (String key : map.keySet()) { String value = map.get(key); } 遍歷方法2: Iterator<Entry<String, String>> iter = map.entrySet().iterator(); Entry<String, String> entry; while (iter.hasNext()) { entry = iter.next(); int key = entry.getKey(); String value = entry.getValue(); } //同樣的for each寫法 for (Entry<String, String> entry: map.entrySet()) { int key = entry.getKey(); String value = entry.getValue(); } 另外,在考慮效率方面,for each速度更快一點點,推薦使用for each寫法來遍歷。 ———————————————— 版權宣告:本文為CSDN博主「Linias」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。 原文連結:https://blog.csdn.net/qq_29373285/java/article/details/81487594

java筆記--Map的用法
Linias 2018-08-07 20:04:39 106364 收藏 176分類專欄: 程式語言版權Map

介面概述
我們通過檢視Map介面描述,發現Map介面下的集合與Collection介面下的集合,它們儲存資料的形式不同,如下圖。
Collection中的集合,元素是孤立存在的(理解為單身),向集合中儲存元素採用一個個元素的方式儲存。
Map中的集合,元素是成對存在的(理解為夫妻)。每個元素由鍵與值兩部分組成,通過鍵可以找對所對應的值。
Collection中的集合稱為單列集合,Map中的集合稱為雙列集合。
需要注意的是,Map中的集合不能包含重複的鍵,值可以重複;每個鍵只能對應一個值。
Map中常用的集合為HashMap集合、LinkedHashMap集合。


Map介面中常用集合概述
通過檢視Map介面描述,看到Map有多個子類,這裡我們主要講解常用的HashMap集合、LinkedHashMap集合。
HashMap<K,V>:儲存資料採用的雜湊表結構,元素的存取順序不能保證一致。由於要保證鍵的唯一、不重複,需要重寫鍵的hashCode()方法、equals()方法。
LinkedHashMap<K,V>:HashMap下有個子類LinkedHashMap,儲存資料採用的雜湊表結構+連結串列結構。通過連結串列結構可以保證元素的存取順序一致;通過雜湊表結構可以保證的鍵的唯一、不重複,需要重寫鍵的hashCode()方法、equals()方法。
注意:Map介面中的集合都有兩個泛型變數<K,V>,在使用時,要為兩個泛型變數賦予資料型別。兩個泛型變數<K,V>的資料型別可以相同,也可以不同。
Map介面中的常用方法
沒有,則沒有這個鍵對應的值,返回null,並把指定的鍵值新增到集合中;
使用put方法時,若指定的鍵(key)在集合中存在,則返回值為集合中鍵對應的值(該值為替換前的值),並把指定鍵所對應的值,替換成指定的新值。
get方法:獲取指定鍵(key)所對應的值(value)
put方法:將指定的鍵與值對應起來,並新增到集合中
方法返回值為鍵所對應的值
使用put方法時,若指定的鍵(key)在集合中
remove方法:根據指定的鍵(key)刪除元素,返回被刪除元素的值(value)。
Map介面的方法演示
public class MapDemo { public static void main(String[] args) { //建立Map物件 Map<String, String> map = new HashMap<String,String>(); //資料採用的雜湊表結構 //給map中新增元素 map.put("星期一", "Monday"); map.put("星期日", "Sunday"); System.out.println(map); // {星期日=Sunday, 星期一=Monday} //當給Map中新增元素,會返回key對應的原來的value值,若key沒有對應的值,返回null System.out.println(map.put("星期一", "Mon")); // Monday System.out.println(map); // {星期日=Sunday, 星期一=Mon} //根據指定的key獲取對應的value String en = map.get("星期日"); System.out.println(en); // Sunday //根據key刪除元素,會返回key對應的value值 String value = map.remove("星期日"); System.out.println(value); // Sunday System.out.println(map); // {星期一=Mon} }}Map集合遍歷鍵找值方式鍵找值方式:即通過元素中的鍵,獲取鍵所對應的值
操作步驟與圖解:
1.獲取Map集合中所有的鍵,由於鍵是唯一的,所以返回一個Set集合儲存所有的鍵


2.遍歷鍵的Set集合,得到每一個鍵
3.根據鍵,獲取鍵所對應的值

程式碼演示: //利用了迭代器Iterator (點此瞭解迭代器)
public class MapDemo { public static void main(String[] args) { //建立Map物件 Map<String, String> map = new HashMap<String,String>(); //給map中新增元素 map.put("鄧超", "孫儷"); map.put("李晨", "范冰冰");map.put("劉德華", "柳巖"); //獲取Map中的所有key Set<String> keySet = map.keySet(); //遍歷存放所有key的Set集合 Iterator<String> it =keySet.iterator(); ** while(it.hasNext()){ //利用了Iterator迭代器** //得到每一個key String key = it.next(); //通過key獲取對應的value String value = map.get(key); System.out.println(key+"="+value); } }}Map集合遍歷鍵值對方式
鍵值對方式:即通過集合中每個鍵值對(Entry)物件,獲取鍵值對(Entry)物件中的鍵與值。
操作步驟與圖解:
1.獲取Map集合中,所有的鍵值對(Entry)物件,以Set集合形式返回。

2.遍歷包含鍵值對(Entry)物件的Set集合,得到每一個鍵值對(Entry)物件
3.通過鍵值對(Entry)物件,獲取Entry物件中的鍵與值。


public class MapDemo { public static void main(String[] args) { //建立Map物件 Map<String, String> map = new HashMap<String,String>(); //給map中新增元素 map.put("鄧超", "孫儷"); map.put("李晨", "范冰冰"); map.put("劉德華", "柳巖"); //獲取Map中的所有key與value的對應關係 Set<Map.Entry<String,String>> entrySet = map.entrySet(); //遍歷Set集合 Iterator<Map.Entry<String,String>> it =entrySet.iterator(); while(it.hasNext()){ //得到每一對對應關係 Map.Entry<String,String> entry = it.next(); //通過每一對對應關係獲取對應的key String key = entry.getKey(); //通過每一對對應關係獲取對應的value String value = entry.getValue(); System.out.println(key+"="+value); } }}注意:Map集合不能直接使用迭代器或者foreach進行遍歷。但是轉成Set之後就可以使用了。
下面轉載自來自一個Map的用法例子:
//假設key 為Integer型 value 為String ,具體自行定義Map<Integer,String> map = new HashMap<Integer,String>();放入資料
map.put(1,"a");map.put(2,"b");map.put(3,"c");根據key獲取對應的value
map.get(1); //獲取到對應key=1時的value=a遍歷方法1:keyset遍歷
Iterator<String> iter = map.keySet().iterator();while (iter.hasNext()) { int key = iter.next(); String value = map.get(key);}————————————————————————————————————————————//還有一種寫法 用for eachfor (String key : map.keySet()) { String value = map.get(key);}遍歷方法2:
Iterator<Entry<String, String>> iter = map.entrySet().iterator();Entry<String, String> entry;while (iter.hasNext()) { entry = iter.next(); int key = entry.getKey(); String value = entry.getValue();}//同樣的for each寫法for (Entry<String, String> entry: map.entrySet()) { int key = entry.getKey(); String value = entry.getValue();}另外,在考慮效率方面,for each速度更快一點點,推薦使用for each寫法來遍歷。


————————————————版權宣告:本文為CSDN博主「Linias」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。原文連結:https://blog.csdn.net/qq_29373285/java/article/details/81487594