文章目錄
- 一. Map集合
-
- 1.1 建立Map集合對象并添加元素
- 1.2 Map集合的成員方法
- 1.3 Map集合的擷取功能
- 二.Map集合周遊
-
- 2.1 Map集合的兩種周遊方式圖解
- 2.2 Map集合的周遊之鍵找值
- 2.3 Map集合的周遊之鍵值對對象找鍵和值
- 三. HashMap集合案例
-
- 3.1 練習1 HashMap[String, Student]
- 3.2 練習2 HashMap[Student,String]
- 3.3 練習3 ArrayList[HashMap[String,String]]
- 3.4 練習4 HashMap[String, ArrayList]
- 四.Properties集合
-
- 4.1 Properties概述
- 4.2 Properties作為Map集合的使用
- 4.3 Properties的特殊功能
- 4.4 Properties和IO流的結合使用
- 參考:
一. Map集合
Map集合将鍵映射到值的對象。一個映射不能包含重複的鍵;每個鍵最多隻能映射到一個值。
1.1 建立Map集合對象并添加元素
代碼:
package Java_study;
import java.util.HashMap;
/**
*
* @author 隻是甲
* @date 2021-07-13
* @remark 建立Map集合對象并添加元素
*
*/
public class map1 {
public static void main(String[] args) {
//建立集合對象
HashMap<String, String> map = new HashMap<>();
//添加元素 put(K key, V value)
map.put("NBA001", "詹姆斯" );
map.put("NBA002", "杜蘭特");
map.put("NBA001", "庫裡");
//輸出集合對象
// key為主鍵不可沖副,新的kv鍵值對會把舊的kv替換掉
System.out.println(map);
}
}
測試記錄:
{NBA001=庫裡, NBA002=杜蘭特}
1.2 Map集合的成員方法
格式:
//a.添加元素
V put(K key,V value)
//b.根據鍵删除鍵值對元素
V remove(Object key)
//c.移除所有的鍵值對元素
void clear()
//d.判斷集合是否包含指定的鍵
boolean containsKey(Object key)
//e.判斷集合是否包含指定的值
boolean containsValue(Object value)
//f.判斷集合是否為空
boolean isEmpty()
//g.傳回集合中的鍵值對的對數
int size()
代碼:
package Java_study;
import java.util.HashMap;
/**
*
* @author 隻是甲
* @date 2021-07-13
* @remark Map集合的成員方法
*
*/
public class map2 {
public static void main(String[] args) {
//建立集合對象
HashMap<String, String> map = new HashMap<>();
//a. map.put() 添加元素
/* 如果主鍵(K)不存在,則直接存儲元素,傳回null
如果主鍵(K)已存在,則用新的KV替換舊的KV,并傳回以前的值(V) */
System.out.println("-----a. map.put()添加元素------");
System.out.println("put: " + map.put("張無忌","周芷若"));
System.out.println("put: " + map.put("張無忌", "趙敏"));
System.out.println("put: " + map);//put: {張無忌=趙敏}
//b. map.remove() 根據建删除鍵值對元素
map.put("張無忌", "趙敏");
map.put("郭靖", "黃蓉");
map.put("楊過", "小龍女");
System.out.println("-----b. map.remove() 根據建删除鍵值對元素-----");
System.out.println("remove: " + map.remove("郭靖"));//remove: 黃蓉
System.out.println("remove: " + map.remove("郭襄"));//remove: null
System.out.println("remove: " + map);//remove: {楊過=小龍女, 張無忌=趙敏}
//c. map.clear() 移除所有鍵值對元素
System.out.println("-----c. map.clear() 移除所有鍵值對元素-----");
map.clear();
System.out.println("clear: " + map);//clear: {}
//d. map.containsKey() 判斷集合是否包含指定的建
map.put("郭靖", "黃蓉");
System.out.println("-----d. map.containsKey() 判斷集合是否包含指定的建-----");
System.out.println("containsKey: " + map.containsKey("郭靖"));//containsKey: true
System.out.println("containsKey: " + map.containsKey("郭襄"));//containsKey: false
System.out.println("containsKey: " + map);//containsKey: {郭靖=黃蓉}
//f. map.isEmpty() 判斷集合是否為空
System.out.println("-----f. map.isEmpty() 判斷集合是否為空-----");
System.out.println("isEmpty: " + map.isEmpty());//isEmpty: false
System.out.println("isEmpty: " + map);//isEmpty: {郭靖=黃蓉}
//g. map.size() 傳回集合中的鍵值對的對數
System.out.println("-----g. map.size() 傳回集合中的鍵值對的對數----");
System.out.println("size: " + map.size());//size: 1
System.out.println("size: " + map);//size: {郭靖=黃蓉}
}
}
測試記錄:
-----a. map.put()添加元素------
put: null
put: 周芷若
put: {張無忌=趙敏}
-----b. map.remove() 根據建删除鍵值對元素-----
remove: 黃蓉
remove: null
remove: {楊過=小龍女, 張無忌=趙敏}
-----c. map.clear() 移除所有鍵值對元素-----
clear: {}
-----d. map.containsKey() 判斷集合是否包含指定的建-----
containsKey: true
containsKey: false
containsKey: {郭靖=黃蓉}
-----f. map.isEmpty() 判斷集合是否為空-----
isEmpty: false
isEmpty: {郭靖=黃蓉}
-----g. map.size() 傳回集合中的鍵值對的對數----
size: 1
size: {郭靖=黃蓉}
1.3 Map集合的擷取功能
格式:
//根據鍵擷取值
V get(Object key)
//擷取所有鍵的集合
Set<K> keySet()
//擷取所有值的集合
Collection<V> values()
代碼:
package Java_study;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
*
* @author 隻是甲
* @date 2021-07-13
* @remark Map集合的擷取功能
*
*/
public class map3 {
public static void main(String[] args) {
//建立集合對象
Map<String, String> map = new HashMap<>();
//添加元素
map.put("郭靖", "黃蓉");
map.put("楊過", "小龍女");
map.put("張無忌", "趙敏");
//a: V get(Object key):根據鍵擷取值
System.out.println("----a: V get(Object key):根據鍵擷取值");
System.out.println("get:" + map.get("張無忌"));//get:趙敏
System.out.println("get:" + map.get("張三豐"));//get:null
//b: Set<K> keySet():擷取所有鍵的集合
System.out.println("-----b: Set<K> keySet():擷取所有鍵的集合-----");
Set<String> set = map.keySet();
for (String key : set) {
System.out.println(key);
}
//c: Collection<V> values():擷取所有值的集合
System.out.println("-----c: Collection<V> values():擷取所有值的集合-----");
Collection<String> values = map.values();
for (String value : values) {
System.out.println(value);
}
}
}
測試記錄:
----a: V get(Object key):根據鍵擷取值
get:趙敏
get:null
-----b: Set<K> keySet():擷取所有鍵的集合-----
楊過
郭靖
張無忌
-----c: Collection<V> values():擷取所有值的集合-----
小龍女
黃蓉
趙敏
二.Map集合周遊
2.1 Map集合的兩種周遊方式圖解
2.2 Map集合的周遊之鍵找值
Map集合周遊的方式1:
思路
Map看成是一個夫妻對的集合
A: 把所有的丈夫給集中起來
B: 周遊丈夫的集合,擷取到每一個丈夫
C: 根據丈夫去找對應的妻子
轉換
A: 擷取所有鍵的集合
B: 周遊鍵的集合,擷取到每一個鍵
C: 根據鍵去找值
代碼:
package Java_study;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
*
* @author 隻是甲
* @date 2021-07-13
* @remark Map集合周遊鍵找值
*
*/
public class map4 {
public static void main(String[] args) {
//建立集合對象
Map<String, String> map = new HashMap<>();
//添加元素
map.put("郭靖", "黃蓉");
map.put("楊過", "小龍女");
map.put("張無忌", "趙敏");
//擷取所有鍵的集合
Set<String> set = map.keySet();
//周遊鍵的集合,擷取到每一個鍵
for (String key : set) {
//根據key找value
String value = map.get(key);
System.out.println("{ " + key + " = " + value + " } ");
}
}
}
測試記錄:
{ 楊過 = 小龍女 }
{ 郭靖 = 黃蓉 }
{ 張無忌 = 趙敏 }
2.3 Map集合的周遊之鍵值對對象找鍵和值
Map集合周遊的方式2:
思路
A:擷取所有結婚證的集合
B:周遊結婚證的集合,得到每一個結婚證
C:根據結婚證擷取丈夫和妻子
轉換
A:擷取所有鍵值對對象的集合
B:周遊鍵值對對象的集合,得到每一個鍵值對對象
C:根據鍵值對對象擷取鍵和值
代碼:
package Java_study;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
*
* @author 隻是甲
* @date 2021-07-13
* @remark Map集合周遊鍵值對(k, v)對象找鍵(k)和值(v)
*
*/
public class map5 {
public static void main(String[] args) {
//建立集合對象
Map<String, String> map = new HashMap<String, String>();
//添加元素
map.put("郭靖", "黃蓉");
map.put("楊過", "小龍女");
map.put("張無忌", "趙敏");
//擷取所有鍵值對(k,v)對象的集合
Set<Map.Entry<String, String>> set = map.entrySet();
//循環鍵值對對象的集合,得到每一個鍵值對對象
for (Map.Entry<String, String> me : set) {
// 根據鍵值對(k,v)對象擷取鍵(k)和值(v)
String key = me.getKey();
String value = me.getValue();
System.out.println("{ " + key + " = " + value + " }" );
}
}
}
測試記錄:
{ 楊過 = 小龍女 }
{ 郭靖 = 黃蓉 }
{ 張無忌 = 趙敏 }
三. HashMap集合案例
3.1 練習1 HashMap[String, Student]
練習1:兩種方式周遊
HashMap<String,Student>
鍵:String 學号
值:Student 學生對象
代碼:
map_student
package Java_study;
/**
*
* @author 隻是甲
* @date 2021-07-13
* @remark 實體學生類 練習1.HashMap<String, Student>
*
*/
public class map_student {
private String name;
private int age;
public map_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 String toString() {
return "{name='" + name + '\'' + ",age = " + age + '}' ;
}
}
map_test1
package Java_study;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
*
* @author 隻是甲
* @date 2021-07-13
* @remark 測試類 練習1.HashMap<String, Student>
*
*/
public class map_test1 {
public static void main(String[] args) {
//建立集合對象
HashMap<String, map_student> hm = new HashMap<>();
//添加集合元素
hm.put("NBA001", new map_student("詹姆斯",37));
hm.put("NBA002", new map_student("杜蘭特",32));
hm.put("NBA003", new map_student("庫裡",32));
//周遊1 根據鍵(k)找值(v)
System.out.println("----周遊1 根據鍵(k)");
Set<String> ksSet = hm.keySet();
for (String key : ksSet) {
map_student value = hm.get(key);
System.out.println(key + " = " + value.toString());
}
//周遊2 根據鍵值對(k,v)對象找鍵(k)找值(v)
System.out.println("-----周遊2 根據鍵值對(k,v)對象找鍵(k)找值(v)-----");
Set<Map.Entry<String, map_student>> esSet = hm.entrySet();
for (Map.Entry<String, map_student> me: esSet) {
String key = me.getKey();
map_student value = me.getValue();
System.out.println(key + " = " + value.toString());
}
}
}
3.2 練習2 HashMap[Student,String]
練習2:任選一種方式周遊
HashMap<Student,String>
鍵:Student 學生對象
值:String 學生住址
要求
如果學生對象的成員變量值相同,就說明是同一個鍵。
注意重寫Student類的hashCode();和equals();
代碼:
map_student
package Java_study;
import java.util.Objects;
/**
*
* @author 隻是甲
* @date 2021-07-13
* @remark 實體學生類 練習1.HashMap<String, Student>
*
*/
public class map_student {
private String name;
private int age;
public map_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 String toString() {
return "{name='" + name + '\'' + ",age = " + age + '}' ;
}
@Override
public boolean equals(Object o) {
if ( this == o ) return true;
if ( o == null || getClass() != o.getClass()) return false;
map_student that = (map_student) o;
return age == that.age && name.equals(that.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
map_test2
package Java_study;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
*
* @author 隻是甲
* @date 2021-07-13
* @remark 測試類 練習2.HashMap<Student,String>
*
*/
public class map_test2 {
public static void main(String[] args) {
//建立集合對象
HashMap<map_student, String> hm = new HashMap<>();
//添加集合元素
hm.put(new map_student("詹姆斯", 37), "NBA001");
hm.put(new map_student("杜蘭特", 32), "NBA002");
hm.put(new map_student("庫裡", 32), "NBA003");
//周遊1 根據鍵(k)找值(v)
System.out.println("-----周遊1 根據鍵(k)找值(v)-----");
Set<map_student> ksSet = hm.keySet();
for (map_student key : ksSet) {
String value = hm.get(key);
System.out.println(key.toString() + " = " + value);
}
//周遊2 根據鍵值對(k,v)對象找鍵(k)找值(v)
System.out.println("-----周遊2 根據鍵值對(k,v)對象找鍵(k)找值(v)-----");
Set<Map.Entry<map_student, String>> esSet = hm.entrySet();
for (Map.Entry<map_student, String> me : esSet) {
map_student key = me.getKey();
String value = me.getValue();
System.out.println(key.toString() + " = " + value);
}
}
}
3.3 練習3 ArrayList[HashMap[String,String]]
需求:
ArrayList集合嵌套HashMap集合并周遊。
定義一個ArrayList集合,它包含三個元素,每一個元素都是HashMap類型的。
每一個HashMap集合的鍵和值都是String類型的,
鍵:
String 丈夫的姓名
值:
String 妻子的姓名
給出如下的字元串資料,請用代碼實作需求:
第一個HashMap集合的元素
孫策 大喬
周瑜 小喬
第二個HashMap集合的元素
郭靖 黃蓉
楊過 小龍女
第三個HashMap集合的元素
令狐沖 任盈盈
林平之 嶽靈珊
代碼:
package Java_study;
import java.util.ArrayList;
import java.util.HashMap;
/**
*
* @author 隻是甲
* @date 2021-07-14
* @remark 練習3.ArrayList<HashMap<String,String>>
*
*/
public class map6 {
public static void main(String[] args) {
ArrayList<HashMap<String, String>> arrayList = new ArrayList<>();
//建立元素1
HashMap<String, String> hm1 = new HashMap<String, String>();
hm1.put("孫策","大喬");
hm1.put("周瑜", "小喬");
//建立元素2
HashMap<String, String> hm2 = new HashMap<String, String>();
hm2.put("郭靖","黃蓉");
hm2.put("楊過", "小龍女");
//建立元素3
HashMap<String, String> hm3 = new HashMap<String, String>();
hm3.put("令狐沖","任盈盈");
hm3.put("林平之", "嶽靈珊");
//把元素添加到arrayList中
arrayList.add(hm1);
arrayList.add(hm2);
arrayList.add(hm3);
//周遊ArrayList集合 aList.for
for (HashMap<String, String> hm : arrayList) {
System.out.println(hm);
}
}
}
測試記錄:
{孫策=大喬, 周瑜=小喬}
{楊過=小龍女, 郭靖=黃蓉}
{令狐沖=任盈盈, 林平之=嶽靈珊}
3.4 練習4 HashMap[String, ArrayList]
需求:
HashMap集合嵌套ArrayList集合并周遊。
定義一個HashMap集合,它包含三個元素,每一個元素的鍵是String類型,值是ArrayList類型。
鍵:
String 人物來自哪部電視劇
值:
ArrayList 人物的名稱
每一個ArrayList集合的資料是String類型的
給出如下的字元串資料,請用代碼實作需求:
第一個ArrayList集合的元素:(三國演義)
諸葛亮
趙雲
第二個ArrayList集合的元素:(西遊記)
唐僧
孫悟空
第三個ArrayList集合的元素:(水浒傳)
武松
魯智深
代碼:
package Java_study;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/**
*
* @author 隻是甲
* @date 2021-07-14
* @remark 練習4.HashMap<String, ArrayList>
*
*/
public class map7 {
public static void main(String[] args) {
//建立集合對象
HashMap<String, ArrayList> hm = new HashMap<>();
//建立元素
ArrayList<String> arrayList1 = new ArrayList<>();
ArrayList<String> arrayList2 = new ArrayList<>();
ArrayList<String> arrayList3 = new ArrayList<>();
arrayList1.add("諸葛亮");
arrayList1.add("趙雲");
arrayList2.add("唐僧");
arrayList2.add("孫悟空");
arrayList3.add("武松");
arrayList3.add("魯智深");
//把元素添加到集合中
hm.put("三國演義", arrayList1);
hm.put("西遊記", arrayList2);
hm.put("水浒傳", arrayList3 );
//周遊集合
Set<Map.Entry<String, ArrayList>> esSet = hm.entrySet();
for (Map.Entry<String, ArrayList> me : esSet) {
String key = me.getKey();
ArrayList value = me.getValue();
for (Object o : value) {
System.out.print(key+" = ");
System.out.println(o);
}
}
}
}
測試記錄:
水浒傳 = 武松
水浒傳 = 魯智深
三國演義 = 諸葛亮
三國演義 = 趙雲
西遊記 = 唐僧
西遊記 = 孫悟空
四.Properties集合
java.util.Hashtable<K,V> 的子類
- java.util.Properties
4.1 Properties概述
Properties:屬性集合類,是一個可以和IO流相結合使用的集合類;
Properties 可儲存在流中或從流中加載。屬性類表中每個鍵及其對應值都是一個字元串;
Properties 沒有<>,不是泛型類;
Properties 是Hashtable的子類,說明是一個Map集合。
4.2 Properties作為Map集合的使用
代碼:
package Java_study;
import java.util.Properties;
import java.util.Set;
/**
*
* @author 隻是甲
* @date 2021-07-14
* @remark Properties作為Map集合的添加、周遊功能
*
*/
public class properties1 {
public static void main(String[] args) {
//作為Map集合使用
Properties prop = new Properties();
//添加元素
prop.put("it001", "hello");
prop.put("it002", "world");
prop.put("it003", "java");
System.out.println("prop:" + prop);
Set<Object> set = prop.keySet();
for (Object key : set){
Object value = prop.get(key);
System.out.println(value);
}
}
}
測試記錄:
prop:{it003=java, it002=world, it001=hello}
java
world
hello
4.3 Properties的特殊功能
Properties的特殊功能:
//1.添加元素
public Object setProperty(String key,String value)
//2.擷取元素
public String getProperty(String key)
//3.擷取所有的鍵的集合
public Set<String> stringPropertyNames()
代碼:
package Java_study;
import java.util.Properties;
import java.util.Set;
/**
*
* @author 隻是甲
* @date 2021-07-14
* @remark Properties特殊功能
*
*/
public class properties2 {
public static void main(String[] args) {
//建立集合對象
Properties prop = new Properties();
//1. 添加元素
prop.setProperty("張三", "30");
prop.setProperty("李四", "40");
prop.setProperty("王五", "50");
//3.擷取所有鍵的集合
Set<String> set = prop.stringPropertyNames();
for (String key : set) {
//擷取元素
String value = prop.getProperty(key);
System.out.println(key + "---" + value);
}
}
}
測試記錄:
王五---50
張三---30
李四---40
4.4 Properties和IO流的結合使用
Properties和IO流的結合使用:
//1.把檔案中的資料讀取到集合中(注意:這個檔案的資料必須是鍵值對形式)
public void load(Reader reader)
//2.把集合中的資料存儲到檔案
public void store(Writer writer,String comments)
代碼:
package Java_study;
import java.io.*;
import java.util.Properties;
import java.util.Set;
/**
*
* @author 隻是甲
* @date 2021-07-14
* @remark Properties和IO流的結合使用
*
*/
public class properties3 {
public static void main(String[] args) throws IOException{
propLoad("E:\\prop.txt");
propStore("E:\\prop2.txt");
}
//2.把集合中的資料存儲到檔案
private static void propStore(String file) throws IOException{
//建立集合
Properties prop = new Properties();
prop.setProperty("詹姆斯", "37" );
prop.setProperty("杜蘭特", "32" );
prop.setProperty("庫裡", "32" );
Writer w = new FileWriter(file);
prop.store(w, "helloworld");
w.close();
}
//1.把檔案中的資料讀取到集合中(注意:這個檔案的資料必須是鍵值對形式)
private static void propLoad(String file) throws IOException {
Properties prop = new Properties();
Reader r = new FileReader(file);
prop.load(r);
r.close();
System.out.println("prop:" + prop);
Set<String> set = prop.stringPropertyNames();
for (String key : set) {
String value = prop.getProperty(key);
System.out.println(key + "---" + value);
}
}
}
測試記錄:
參考:
- https://blog.csdn.net/qq_43529621/article/details/116042907