我們的網(wǎng)站長沙網(wǎng)站制作公司哪家好
🎊專欄【Java基礎】
🍔喜歡的詩句:更喜岷山千里雪 三軍過后盡開顏。
🎆音樂分享【The truth that you leave】
🥰歡迎并且感謝大家指出我的問題
文章目錄
- 🌺雙列集合的特點
- 🎄Map
- 🍔Map常用的API
- ?創(chuàng)建Map集合的對象
- ?添加元素
- ?注意
- ?移除元素
- ?清空元素
- ?判斷是否存在某個 鍵 / 值
- ?判斷集合是否為空
- ?判斷集合的長度
- 🍔Map的遍歷方式
- ?方法一:鍵找值
- ?方法二:鍵值對
- ?分析一下Map.Entry<String,String>
- ?方法三:Lambda表達式
- ?分析一下new BiConsumer<String, String>()
- 🎄HashMap
- 🍔特點
- 🍔例子
- ?注意
- 🎄LinkHashMap
- 🍔特點
- 🎄TreeMap
- 🍔特點
- ?兩種排序規(guī)則

🌺雙列集合的特點
- 雙列集合
一次需要存一對數(shù)據(jù)
,分別是鍵和值 - 鍵不能重復,值可以重復
- 鍵和值是一一對應的,每一個鍵都能找到自己對應的值
- 鍵+值 這個整體我們稱為"鍵值對"或者"鍵值對對象",在Java中稱為"Entry對象"
🎄Map
🍔Map常用的API
?創(chuàng)建Map集合的對象
?添加元素
put("元素1","元素2");
?注意
在添加元素的時候,如果鍵不存在,那么直接把 鍵值對對象 添加到map集合中,方法返回null
在添加元素的時候,如果鍵是存在
的,那么會把 原來的鍵值對對象覆蓋
,把被覆蓋的值
進行返回
?移除元素
remove("元素");
?清空元素
clear();
?判斷是否存在某個 鍵 / 值
?判斷集合是否為空
?判斷集合的長度
size();
🍔Map的遍歷方式
?方法一:鍵找值
package com.practice;import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class practicedemo {public static void main(String[] args) {Map<String,String>map=new HashMap<>();map.put("1","2");map.put("3","4");map.put("5","6");//通過鍵找值//獲取所有的鍵,把這些鍵都放到一個單列集合中Set<String>keys=map.keySet();for(String key:keys){//利用map集合中的鍵獲取對應的值 getString value=map.get(key);System.out.println(key+"="+value);}}
}
?方法二:鍵值對
package com.practice;import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class practicedemo {public static void main(String[] args) {Map<String,String>map=new HashMap<>();map.put("1","2");map.put("3","4");map.put("5","6");//通過鍵值對//獲取所有的鍵值對對象,返回一個Set集合Set<Map.Entry<String,String>> entries = map.entrySet();//遍歷entries這個集合,去得到里面的每一個鍵值對對象for (Map.Entry<String,String>entry:entries){//通過entry調用get方法獲取鍵和值String key=entry.getKey();String value=entry.getValue();System.out.println(key+"+"+value);}}
}
?分析一下Map.Entry<String,String>
所以我們在表示Entry類型的時候,要使用Map(外部接口) . Entry
去調用一下
?方法三:Lambda表達式
package com.practice;import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;public class practicedemo {public static void main(String[] args) {Map<String,String>map=new HashMap<>();map.put("1","2");map.put("3","4");map.put("5","6");//通過lambda表達式//匿名內部類的方式map.forEach(new BiConsumer<String, String>() {@Overridepublic void accept(String s, String s2) {System.out.println(s+"="+s2);}});System.out.println("----------------------------");map.forEach((String s, String s2) -> {System.out.println(s+"="+s2);});System.out.println("----------------------------");map.forEach(( s, s2) -> System.out.println(s+"="+s2));}
}
?分析一下new BiConsumer<String, String>()
為什么是new BiConsumer<String, String>()
我們來查看一下forEach的源碼
繼續(xù)查看BiConsumer的源碼
Lambda表達式只能用于實現(xiàn)只有一個抽象方法的接口,因為BiConsumer是一個接口,所以可以使用Lambda表達式
🎄HashMap
🍔特點
- HashMap是Map里面的一個實現(xiàn)類
- 方法可以直接使用Map里面的方法
- 特點都是由 鍵 決定的:無序,不重復,無索引
🍔例子
?注意
- HashMap底層是哈希表結構的
- 依賴hashCode方法和equals方法保證
鍵的唯一
- 如果
鍵
存儲的是自定義對象,需要
重寫hashCode和equals方法 - 如果
值
存儲的是自定義對象,不需要
重寫hashCode和equals方法
Student.java
package com.itheima.a02myhashmap;import java.util.Objects;public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}/*** 獲取* @return name*/public String getName() {return name;}/*** 設置* @param name*/public void setName(String name) {this.name = name;}/*** 獲取* @return age*/public int getAge() {return age;}/*** 設置* @param age*/public void setAge(int age) {this.age = age;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age && Objects.equals(name, student.name);}@Overridepublic int hashCode() {//return Objects.hash(name, age);return name.hashCode();}public String toString() {return "Student{name = " + name + ", age = " + age + "}";}
}
A01_HashMapDemo1.java
package com.itheima.a02myhashmap;import java.util.HashMap;
import java.util.Map;
import java.util.Set;public class A01_HashMapDemo1 {public static void main(String[] args) {/*需求:創(chuàng)建一個HashMap集合,鍵是學生對象(Student),值是籍貫(String)。存儲三個鍵值對元素,并遍歷要求:同姓名,同年齡認為是同一個學生核心點:HashMap的鍵位置如果存儲的是自定義對象,需要重寫hashCode和equals方法。*///1.創(chuàng)建HashMap的對象HashMap<Student,String> hm = new HashMap<>();//2.創(chuàng)建三個學生對象Student s1 = new Student("zhangsan",23);Student s2 = new Student("lisi",24);Student s3 = new Student("wangwu",25);Student s4 = new Student("wangwu",25);//3.添加元素hm.put(s1,"江蘇");hm.put(s2,"浙江");hm.put(s3,"福建");hm.put(s4,"山東");//4.遍歷集合Set<Student> keys = hm.keySet();for (Student key : keys) {String value = hm.get(key);System.out.println(key + "=" + value);}System.out.println("--------------------------");Set<Map.Entry<Student, String>> entries = hm.entrySet();for (Map.Entry<Student, String> entry : entries) {Student key = entry.getKey();String value = entry.getValue();System.out.println(key + "=" + value);}System.out.println("--------------------------");hm.forEach((student, s)-> System.out.println(student + "=" + s));}
}
🎄LinkHashMap
🍔特點
- 由鍵決定:有序,不重復,無索引
- 這里的有序是指保證存儲和取出的元素順序一致
🎄TreeMap
🍔特點
- TreeMap和TreeSet底層原理一樣,都是紅黑樹結構的
- 由鍵決定特性:不重復,無索引,可排序
- 可排序是可以
對鍵
進行排序,默認按照鍵從小到大排序,也可以自己定義鍵的排序規(guī)則
?兩種排序規(guī)則
- 實現(xiàn)Comparable接口,指定比較規(guī)則
- 創(chuàng)建集合時傳遞Comparator比較器對象,指定比較規(guī)則
默認是升序排列
加上比較器后,可以變成降序排序
對比一下
HashMap效率高但是TreeMap可以排序,使用時要有所甄別