Java那點兒事之Map集合不為人知的秘密有哪些
前言
上期我們說到瞭Collection集合,他是單列的集合,分為List集合和Set集合,今天我將繼續分析一個雙列集合也就是Map,為什麼叫他雙列集合呢? 往下看,你就知道瞭。
一、Map
Map集合的特點
– 鍵值對映射關系
– 一個鍵對應一個值
– 鍵不能重復,值可以重復
– 元素存取無序
我們通過他的一個實現類HashMap集合來理解
二、HashMap的基本概念
HashMap的定義:
HashMap 是一個散列表,它存儲的內容是鍵值對(key-value)映射。
HashMap 實現瞭 Map 接口,根據鍵的 HashCode 值存儲數據,具有很快的訪問速度,最多允許一條記錄的鍵為 null,不支持線程同步。
HashMap 是無序的,即不會記錄插入的順序。
HashMap 繼承於AbstractMap,實現瞭 Map、Cloneable、java.io.Serializable 接口。
那麼HashMap的鍵和值的類型可以是String類型,也可以是其他數據的包裝類類型,那麼說到包裝類類型,這裡順便幫大傢復習一下包裝類類型哦:
三、HashMap集合的基本方法與使用
學完HashMap集合的基本概念,那麼我們怎麼去在實際開發過程中去使用他呢?這裡我們就要用到他的特有方法瞭,
以下是HashMap集合的常用方法
需要註意的是,Map集合的元素的添加並不是Collection集合的add()方法,而是Put()方法。因為Map集合是鍵值對集合,那麼我們如何獲取集合中的每一個元素呢?這裡集合也給我們提供瞭他的元素獲取方法:
示例代碼如下:
import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Set; /* Map集合的獲取功能: V get(Object key):根據鍵獲取值 Set<K> keySet():獲取所有鍵的集合 Collection<V> values():獲取所有值的集合 */ public class MapDemo03 { public static void main(String[] args) { Map<String, String> m = new HashMap<String, String>(); m.put("張三", "李四"); m.put("王五", "趙六"); m.put("李老板", "光頭強"); // V get(Object key):根據鍵獲取值 System.out.println(m.get("張三")); System.out.println(m.get("張四")); System.out.println("============="); // Set<K> keySet():獲取所有鍵的集合 Set<String> s = m.keySet(); for (String i : s) { System.out.println(i); } System.out.println("============="); // Collection<V> values():獲取所有值的集合 Collection<String> c = m.values(); for (String x : c) { System.out.println(x); } } }
輸出結果:
李四
null
=============
張三
王五
李老板
=============
李四
趙六
光頭強
四、HashMap集合的遍歷
其實遍歷無非就是把集合中的元素一個一個給取出來,我們能用,那麼在第三部分其實就已經講到瞭一種遍歷方式,那就是我們去獲取鍵的集合,然後用循環去獲取每一個鍵所對應的值,這樣我們就將集合中的每一個元素取出來瞭。
遍歷方式一:根據鍵的集合找值
步驟分析
– 獲取所有鍵的集合。用keySet()方法實現
– 遍歷鍵的集合,獲取到每一個鍵。用增強for實現
– 根據鍵去找值。用get(Object key)方法實現
代碼實現
import java.util.Map; import java.util.HashMap; import java.util.Set; /* Map集合的遍歷(方式1): 1:獲取所有鍵的集合。用keySet()方法實現 2:遍歷鍵的集合,獲取到每一個鍵。用增強for實現 3:根據鍵去找值。用get(Object key)方法實現 */ public class MapDemo01 { public static void main(String[] args) { //創建集合對象 Map<String, String> map = new HashMap<String, String>(); //添加元素 map.put("張無忌", "趙敏"); map.put("郭靖", "黃蓉"); map.put("楊過", "小龍女"); //1:獲取所有鍵的集合。用keySet()方法實現 Set<String> keySet = map.keySet(); for (String key : keySet) { String value = map.get(key); System.out.println(key + "," + value); } } }
輸出結果:
楊過,小龍女
郭靖,黃蓉
張無忌,趙敏
那麼第二種方法就是我們利用entrySet()方法來獲取集合中所有的鍵值對集合,然後去獲取所對的鍵或值。
HashMap集合遍歷方式二:鍵值對集合找鍵值對
步驟分析
– 獲取所有鍵值對對象的集合
– Set<Map.Entry<K,V>> entrySet():獲取所有鍵值對對象的集合
– 遍歷鍵值對對象的集合,得到每一個鍵值對對象
– 用增強for實現,得到每一個Map.Entry
– 根據鍵值對對象獲取鍵和值
– 用getKey()得到鍵
– 用getValue()得到值
代碼實現
import java.util.HashMap; import java.util.Map; import java.util.Set; /* Map集合的遍歷(方式2): 1:獲取所有鍵值對對象的集合 Set<Map.Entry<K,V>> entrySet():獲取所有鍵值對對象的集合 2:遍歷鍵值對對象的集合,得到每一個鍵值對對象 用增強for實現,得到每一個Map.Entry 3:根據鍵值對對象獲取鍵和值 用getKey()得到鍵 用getValue()得到值 */ public class MapDemo02 { public static void main(String[] args) { //創建集合對象 Map<String, String> map = new HashMap<String, String>(); //添加元素 map.put("張無忌", "趙敏"); map.put("郭靖", "黃蓉"); map.put("楊過", "小龍女"); //1:獲取所有鍵值對對象的集合 Set<Map.Entry<String, String>> me = map.entrySet(); // 遍歷鍵值對對象的集合,得到每一個鍵值對對象 for (Map.Entry<String, String> e : me) { String key = e.getKey(); String value = e.getValue(); System.out.println(key + "," + value); } } }
輸出結果:
楊過,小龍女
郭靖,黃蓉
張無忌,趙敏
兩種遍歷方式都是很實用,各位大佬在開發中願意用哪種都是可以的哦。
五、HashMap集合的綜合案例
有道是:與其臨淵羨魚,不如退而結網。看瞭那麼 多理論的東西不自己動手去實踐一下,那麼魚兒永遠在魚塘,知識永遠在電腦裡,接下來就讓我們一起動手做一道題,來加深一下印象。
案例需求:
案例需求
– 鍵盤錄入一個字符串,要求統計字符串中每個字符串出現的次數。
– 舉例:鍵盤錄入“aababcabcdabcde” 在控制臺輸出:“a(5)b(4)c(3)d(2)e(1)”
思路解析:
1:鍵盤錄入一個字符串
2:創建HashMap集合,鍵是Character,值是Integer
3:遍歷字符串,得到每一個字符
4:拿得到的每一個字符作為鍵到HashMap集合中去找對應的值,看其返回值
如果返回值是null:說明該字符在HashMap集合中不存在,就把該字符作為鍵,1作為值存儲
如果返回值不是null:說明該字符在HashMap集合中存在,把該值加1,然後重新存儲該字符和對應的值
5:遍歷HashMap集合,得到鍵和值,按照要求進行拼接
6:輸出結果
代碼實例:
import java.util.HashMap; import java.util.Scanner; import java.util.Set; /* 需求: 鍵盤錄入一個字符串,要求統計字符串中每個字符串出現的次數。 舉例:鍵盤錄入“aababcabcdabcde” 在控制臺輸出:“a(5)b(4)c(3)d(2)e(1)” 思路: 1:鍵盤錄入一個字符串 2:創建HashMap集合,鍵是Character,值是Integer 3:遍歷字符串,得到每一個字符 4:拿得到的每一個字符作為鍵到HashMap集合中去找對應的值,看其返回值 如果返回值是null:說明該字符在HashMap集合中不存在,就把該字符作為鍵,1作為值存儲 如果返回值不是null:說明該字符在HashMap集合中存在,把該值加1,然後重新存儲該字符和對應的值 5:遍歷HashMap集合,得到鍵和值,按照要求進行拼接 6:輸出結果 */ public class HashMapDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("請輸入一個字符串:"); String s = sc.nextLine(); HashMap<Character, Integer> hm = new HashMap<Character, Integer>(); for (int i = 0; i < s.length(); i++) { char key = s.charAt(i); Integer value = hm.get(key); if (value == null) { hm.put(key, 1); } else { value++; hm.put(key, value); } } StringBuilder sb = new StringBuilder(); Set<Character> keySet = hm.keySet(); for (Character key1 : keySet) { Integer values = hm.get(key1); sb.append(key1).append("(").append(values).append(")"); } String result = sb.toString(); System.out.println(result); } }
輸出結果:
請輸入一個字符串:
aababcabcdabcde
a(5)b(4)c(3)d(2)e(1)
六、總結
學習集合就應該仔細去瞭解其特有方法,並註意區分,多實踐才能加深明白其中用法,並且應該結合以前學習的知識去理解,可能會有意向不到的收獲哦。本期分享到這裡結束瞭,結合上期食用更佳哦,下期再見!
到此這篇關於Java那點兒事之Map集合不為人知的秘密有哪些的文章就介紹到這瞭,更多相關Java Map集合內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Java之map的常見用法講解與五種循環遍歷實例代碼理解
- Java集合類之Map集合的特點及使用詳解
- Java中Map接口使用以及有關集合的面試知識點匯總
- Java 深入淺出掌握Map集合之雙列集合
- Java Map接口概述和常用方法詳解