前言
上期我們說到了Collection集合,他是單列的集合,分為List集合和Set集合,今天我將繼續分析一個雙列集合也就是Map,為什么叫他雙列集合呢? 往下看,你就知道了,

目錄
一、Map
二、HashMap的基本概念
三、HashMap集合的基本方法與使用
四、HashMap集合的遍歷
五、HashMap集合的綜合案例
六、總結
一、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)
六、總結
學習集合就應該仔細去了解其特有方法,并注意區分,多實踐才能加深明白其中用法,并且應該結合以前學習的知識去理解,可能會有意向不到的識訓哦,本期分享到這里結束了,結合上期食用更佳哦,下期再見!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/327978.html
標籤:java
