5、Map集合——HashMap
文章目錄
1. Map集合概述和特點
interface Map<K,V> K:鍵的型別;V:值的型別
1.1 Map集合的特點
- 鍵值對對映關係
- 一個鍵對應一個值
- 鍵不能重複,值可以重複
- 元素存取無序
1.2 Map集合的基本使用
public class MapDemo01 {
public static void main(String[] args) {
//建立集合物件
Map<String,String> map = new HashMap<String,String>();
//V put(K key, V value) 將指定的值與該對映中的指定鍵相關聯
map.put("itheima001","林青霞");
map.put("itheima002","張曼玉");
map.put("itheima003","王祖賢");
map.put("itheima003","柳巖");
//輸出集合物件
System.out.println(map);
}
}
2. Map集合的基本功能
2.1 方法介紹
示例程式碼:
import java.util.HashMap;
import java.util.Map;
public class MapDemo02 {
public static void main(String[] args) {
//建立集合物件
Map<String,String> map = new HashMap<String,String>();
//V put(K key,V value):新增元素
map.put("張無忌","趙敏");
map.put("郭靖","黃蓉");
map.put("楊過","小龍女");
//V remove(Object key):根據鍵刪除鍵值對元素
// System.out.println(map.remove("郭靖"));
// System.out.println(map.remove("郭襄"));
//void clear():移除所有的鍵值對元素
// map.clear();
//boolean containsKey(Object key):判斷集合是否包含指定的鍵
// System.out.println(map.containsKey("郭靖"));
// System.out.println(map.containsKey("郭襄"));
//boolean isEmpty():判斷集合是否為空
// System.out.println(map.isEmpty());
//int size():集合的長度,也就是集合中鍵值對的個數
System.out.println(map.size());
//輸出集合物件
System.out.println(map);
}
}
3. Map集合的獲取功能
3.1 方法介紹
示例程式碼:
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> map = new HashMap<String, String>();
//新增元素
map.put("張無忌", "趙敏");
map.put("郭靖", "黃蓉");
map.put("楊過", "小龍女");
//V get(Object key):根據鍵獲取值
// System.out.println(map.get("張無忌"));
// System.out.println(map.get("張三丰"));
//Set<K> keySet():獲取所有鍵的集合
// Set<String> keySet = map.keySet();
// for(String key : keySet) {
// System.out.println(key);
// }
//Collection<V> values():獲取所有值的集合
Collection<String> values = map.values();
for(String value : values) {
System.out.println(value);
}
}
}
4. Map集合的遍歷(方式1)
-
遍歷思路
我們剛才儲存的元素都是成對出現的,所以我們把Map看成是一個夫妻對的集合 1. 把所有的丈夫給集中起來 2. 遍歷丈夫的集合,獲取到每一個丈夫 3. 根據丈夫去找對應的妻子
-
步驟分析
獲取所有鍵的集合。用keySet()方法實現 遍歷鍵的集合,獲取到每一個鍵。用增強for實現 根據鍵去找值。用get(Object key)方法實現
-
程式碼實現:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDemo01 {
public static void main(String[] args) {
//建立集合物件
Map<String, String> map = new HashMap<String, String>();
//新增元素
map.put("張無忌", "趙敏");
map.put("郭靖", "黃蓉");
map.put("楊過", "小龍女");
//獲取所有鍵的集合。用keySet()方法實現
Set<String> keySet = map.keySet();
//遍歷鍵的集合,獲取到每一個鍵。用增強for實現
for (String key : keySet) {
//根據鍵去找值。用get(Object key)方法實現
String value = map.get(key);
System.out.println(key + "," + value);
}
}
}
5. Map集合的遍歷(方式2)
-
遍歷思路
我們剛才儲存的元素都是成對出現的,所以我們把Map看成是一個夫妻對的集合 1. 獲取所有結婚證的集合 2. 遍歷結婚證的集合,得到每一個結婚證 3. 根據結婚證獲取丈夫和妻子
-
步驟分析
1. 獲取所有鍵值對物件的集合 * Set<Map.Entry<K,V>> entrySet():獲取所有鍵值對物件的集合 2. 遍歷鍵值對物件的集合,得到每一個鍵值對物件 * 用增強for實現,得到每一個Map.Entry 3. 根據鍵值對物件獲取鍵和值 *用getKey()得到鍵 *用getValue()得到值
-
程式碼實現
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDemo02 {
public static void main(String[] args) {
//建立集合物件
Map<String, String> map = new HashMap<String, String>();
//新增元素
map.put("張無忌", "趙敏");
map.put("郭靖", "黃蓉");
map.put("楊過", "小龍女");
//獲取所有鍵值對物件的集合
Set<Map.Entry<String, String>> entrySet = map.entrySet();
//遍歷鍵值對物件的集合,得到每一個鍵值對物件
for (Map.Entry<String, String> me : entrySet) {
//根據鍵值對物件獲取鍵和值
String key = me.getKey();
String value = me.getValue();
System.out.println(key + "," + value);
}
}
}
6. Map集合的案例
6.1 HashMap集合練習之鍵是String值是Student
案例需求:
建立一個HashMap集合,鍵是學號(String),值是學生物件(Student)。儲存三個鍵值對元素,並遍歷
- 程式碼實現
學生類:
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
測試類:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class HashMapDemo {
public static void main(String[] args) {
//建立HashMap集合物件
HashMap<String, Student> hm = new HashMap<String, Student>();
//建立學生物件
Student s1 = new Student("林青霞", 30);
Student s2 = new Student("張曼玉", 35);
Student s3 = new Student("王祖賢", 33);
//把學生新增到集合
hm.put("itheima001", s1);
hm.put("itheima002", s2);
hm.put("itheima003", s3);
//方式1:鍵找值
Set<String> keySet = hm.keySet();
for (String key : keySet) {
Student value = hm.get(key);
System.out.println(key + "," + value.getName() + "," + value.getAge());
}
System.out.println("--------");
//方式2:鍵值對物件找鍵和值
Set<Map.Entry<String, Student>> entrySet = hm.entrySet();
for (Map.Entry<String, Student> me : entrySet) {
String key = me.getKey();
Student value = me.getValue();
System.out.println(key + "," + value.getName() + "," + value.getAge());
}
}
}
6.2 HashMap集合練習之鍵是Student值是String
案例需求:
建立一個HashMap集合,鍵是學生物件(Student),值是居住地 (String)。儲存多個元素,並遍歷。
要求保證鍵的唯一性:如果學生物件的成員變數值相同,我們就認為是同一個物件
- 程式碼實現
學生類:
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Student student = (Student) o;
if (age != student.age) return false;
return name != null ? name.equals(student.name) : student.name == null;
}
@Override
public int hashCode() {
int result = name != null ? name.hashCode() : 0;
result = 31 * result + age;
return result;
}
}
測試類:
import java.util.HashMap;
import java.util.Set;
public class HashMapDemo {
public static void main(String[] args) {
//建立HashMap集合物件
HashMap<Student, String> hm = new HashMap<Student, String>();
//建立學生物件
Student s1 = new Student("林青霞", 30);
Student s2 = new Student("張曼玉", 35);
Student s3 = new Student("王祖賢", 33);
Student s4 = new Student("王祖賢", 33);
//把學生新增到集合
hm.put(s1, "西安");
hm.put(s2, "武漢");
hm.put(s3, "鄭州");
hm.put(s4, "北京");
//遍歷集合
Set<Student> keySet = hm.keySet();
for (Student key : keySet) {
String value = hm.get(key);
System.out.println(key.getName() + "," + key.getAge() + "," + value);
}
}
}
6.3 集合巢狀之ArrayList巢狀HashMap
案例需求:
建立一個ArrayList集合,儲存三個元素,每一個元素都是HashMap
每一個HashMap的鍵和值都是String,並遍歷。
- 程式碼實現:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
/*
需求:
建立一個ArrayList集合,儲存三個元素,每一個元素都是HashMap,每一個HashMap的鍵和值都是String,並遍歷
思路:
1:建立ArrayList集合
2:建立HashMap集合,並新增鍵值對元素
3:把HashMap作為元素新增到ArrayList集合
4:遍歷ArrayList集合
給出如下的資料:
第一個HashMap集合的元素:
孫策 大喬
周瑜 小喬
第二個HashMap集合的元素:
郭靖 黃蓉
楊過 小龍女
第三個HashMap集合的元素:
令狐沖 任盈盈
林平之 嶽靈珊
*/
public class ArrayListIncludeHashMapDemo {
public static void main(String[] args) {
//建立ArrayList集合
ArrayList<HashMap<String, String>> array = new ArrayList<HashMap<String, String>>();
//建立HashMap集合,並新增鍵值對元素
HashMap<String, String> hm1 = new HashMap<String, String>();
hm1.put("孫策", "大喬");
hm1.put("周瑜", "小喬");
//把HashMap作為元素新增到ArrayList集合
array.add(hm1);
HashMap<String, String> hm2 = new HashMap<String, String>();
hm2.put("郭靖", "黃蓉");
hm2.put("楊過", "小龍女");
//把HashMap作為元素新增到ArrayList集合
array.add(hm2);
HashMap<String, String> hm3 = new HashMap<String, String>();
hm3.put("令狐沖", "任盈盈");
hm3.put("林平之", "嶽靈珊");
//把HashMap作為元素新增到ArrayList集合
array.add(hm3);
//遍歷ArrayList集合
for (HashMap<String, String> hm : array) {
Set<String> keySet = hm.keySet();
for (String key : keySet) {
String value = hm.get(key);
System.out.println(key + "," + value);
}
}
}
}
6.4 集合巢狀之HashMap巢狀ArrayList
案例需求:
建立一個HashMap集合,儲存三個鍵值對元素,每一個鍵值對元素的鍵是String,值是ArrayList
每一個ArrayList的元素是String,並遍歷。
- 程式碼實現
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Set;
/*
需求:建立一個HashMap集合,儲存三個鍵值對元素,每一個鍵值對元素的鍵是String,值是ArrayList,
每一個ArrayList的元素是String,並遍歷
思路:
1:建立HashMap集合
2:建立ArrayList集合,並新增元素
3:把ArrayList作為元素新增到HashMap集合
4:遍歷HashMap集合
給出如下的資料:
第一個ArrayList集合的元素:(三國演義)
諸葛亮
趙雲
第二個ArrayList集合的元素:(西遊記)
唐僧
孫悟空
第三個ArrayList集合的元素:(水滸傳)
武松
魯智深
*/
public class HashMapIncludeArrayListDemo {
public static void main(String[] args) {
//建立HashMap集合
HashMap<String, ArrayList<String>> hm = new HashMap<String, ArrayList<String>>();
//建立ArrayList集合,並新增元素
ArrayList<String> sgyy = new ArrayList<String>();
sgyy.add("諸葛亮");
sgyy.add("趙雲");
//把ArrayList作為元素新增到HashMap集合
hm.put("三國演義",sgyy);
ArrayList<String> xyj = new ArrayList<String>();
xyj.add("唐僧");
xyj.add("孫悟空");
//把ArrayList作為元素新增到HashMap集合
hm.put("西遊記",xyj);
ArrayList<String> shz = new ArrayList<String>();
shz.add("武松");
shz.add("魯智深");
//把ArrayList作為元素新增到HashMap集合
hm.put("水滸傳",shz);
//遍歷HashMap集合
Set<String> keySet = hm.keySet();
for(String key : keySet) {
System.out.println(key);
ArrayList<String> value = hm.get(key);
for(String s : value) {
System.out.println("\t" + s);
}
}
}
}
6.5 統計字串中每個字元出現的次數
案例需求:
鍵盤錄入一個字串,要求統計字串中每個字串出現的次數。
舉例:鍵盤錄入“aababcabcdabcde” 在控制檯輸出:“a(5)b(4)c(3)d(2)e(1)”
- 程式碼實現
import java.util.HashMap;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
/*
思路:
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 line = sc.nextLine();
//建立HashMap集合,鍵是Character,值是Integer
// HashMap<Character, Integer> hm = new HashMap<Character, Integer>();
TreeMap<Character, Integer> hm = new TreeMap<Character, Integer>();
//遍歷字串,得到每一個字元
for (int i = 0; i < line.length(); i++) {
char key = line.charAt(i);
//拿得到的每一個字元作為鍵到HashMap集合中去找對應的值,看其返回值
Integer value = hm.get(key);
if (value == null) {
//如果返回值是null:說明該字元在HashMap集合中不存在,就把該字元作為鍵,1作為值儲存
hm.put(key,1);
} else {
//如果返回值不是null:說明該字元在HashMap集合中存在,把該值加1,然後重新儲存該字元和對應的值
value++;
hm.put(key,value);
}
}
//遍歷HashMap集合,得到鍵和值,按照要求進行拼接
StringBuilder sb = new StringBuilder();
Set<Character> keySet = hm.keySet();
for(Character key : keySet) {
Integer value = hm.get(key);
sb.append(key).append("(").append(value).append(")");
}
String result = sb.toString();
//輸出結果
System.out.println(result);
}
}
相關文章
- Java集合原始碼學習(5)HashMapJava原始碼HashMap
- 【JavaSE】Map集合,HashMap的常用方法put、get的原始碼解析JavaHashMap原始碼
- Map集合
- Java集合:HashMapJavaHashMap
- Map集合&&Map集合的不同遍歷【keySet()&&entrySet()】
- 【java】【Map】HashMap、Hashtable、CollectionsJavaHashMap
- Java集合之HashMapJavaHashMap
- Hash Map集合和Hash Set集合
- JUC集合安全-Map
- JAVA集合——Map介面Java
- Map集合筆記筆記
- Java集合類——MapJava
- 如何遍歷HashMap集合?HashMap
- Java集合系列之---HashMapJavaHashMap
- HashMap,難的不在Map,而在HashHashMap
- Map集合類_演練
- java中的Map集合Java
- JAVA集合框架 - Map介面Java框架
- MVC遍歷map集合MVC
- Java Map集合練習Java
- HashMap與LinkedHashMap型別集合HashMap型別
- java集合初探(一):HashMap.JavaHashMap
- 集合框架-HashMap&HashSet&LinkedHshMap框架HashMap
- java進階(29)--HashMap集合JavaHashMap
- java集合框架--HashMap--putJava框架HashMap
- Java集合——深入理解HashMapJavaHashMap
- Java集合——HashMap(jdk1.7)JavaHashMapJDK
- Java集合——HashMap(jdk1.8)JavaHashMapJDK
- Java集合四:Map簡介;Java
- 深度解析HashMap集合底層原理HashMap
- java集合原始碼分析(六):HashMapJava原始碼HashMap
- 集合類HashMap,HashTable,ConcurrentHashMap區別?HashMap
- Java HashMap和Go map原始碼對比JavaHashMapGo原始碼
- Java中List集合轉Map集合報錯:Duplicate keyJava
- Java遍歷Map集合的方法Java
- Map集合(Java基礎、skycto JEEditor)Java
- JavaScript --- Map集合結構詳解JavaScript
- JavaScript — Map集合結構詳解JavaScript