今日內容
- Set集合特點和HashSet集合類
- Map集合
- HashMap集合的相關案例
01. Set集合的特點
總結:
1. 存取無序
無序: 在存儲的時候,底層會按照【特定】的順序進行排列
jdk8+ :自動排序
存: bacd
取: abcd
2. 無索引
3. 不可以存儲重複的 : 可以保證元素的唯一性
應用場景: 今後需要需求,對元素去重, 首先就要想到set集合
int[] arr = {11,22,22,33,33};
02. HashSet保證元素唯一性的原理
- 重點, 必掌握內容!! 面試經常問!
問題1: HashSet集合保證元素唯一是依賴哪兩個方法?
hashCode和equals方法配合使用的。
03. HashSet集合的練習存儲自定義對象並遍歷
04. HashSet集合的練習存儲自定義對象保證元素唯一性
- 案例演示
總結:
問題2: hashcode和equals這兩個方法是如何配合使用的? --> 死活整明白了.
當我們調用集合的add方法添加元素的時候, 首先會調用該對象的hashCode方法計算出一個哈希值
看集合中是否有相同的哈希值
沒有: 存
有:
調用equals方法逐個的進行比較
false : 存
true : 不存
- LinkedHashSet:
特點: set集合當中唯一一個,能夠保證存取有序的集合(也能保證元素的唯一性)
05. 創建Map集合對象並添加元素
- A:Map接口概述
- K -- > key --> 鍵
- V -- > Value --> 值
- 鍵值對兒
- 查看API可以知道:
- 將鍵映射到值的對象
- 一個映射不能包含重複的鍵 --> 鍵是唯一的
- 每個鍵最多隻能映射到一個值 --> 一夫一妻制
-
B:Map接口和Collection接口的不同
- Map是雙列的,Collection是單列的
- Map的鍵唯一,Collection的子體系Set是唯一的
-
Map集合的【數據結構只針對【鍵】有效】,跟值無關;Collection集合的數據結構是【針對元素有效】
HashMap - HashSet
底層使用的是一套數據結構 -> 哈希表 細節: HashSet單列集合的add方法, 底層依賴於雙列集合的put方法。
-
C: Map集合的添加方法
-
V put(K key, V value)
- Map集合當中, 鍵是唯一的, 值是可以重複的
- Map集合的數據結構, 針對於鍵有效.
- put方法不但能用於添加, 還可以用於修改.
-
put方法的返回值, 是覆蓋掉的值. HashMap<String , Integer> hm = new HashMap<>(); hm.put("zhangsan", 23); // null hm.put("zhangsan", 24); // 23
-
單列集合的add方法, 底層依賴於雙列集合的put方法.
-
- 轉
06. Map集合的成員方法
- V put(K key,V value):添加元素
- void clear():移除所有的鍵值對元素
- boolean isEmpty():判斷集合是否爲空
-
int size():返回集合中的鍵值對的對數
-
V remove(Object key):根據鍵刪除鍵值對元素
- boolean containsKey(Object key):判斷集合是否包含指定的鍵
- boolean containsValue(Object value):判斷集合是否包含指定的值
07. Map集合的獲取功能測試
- V get(Object key):根據鍵獲取值
- Set keySet():獲取所有鍵的集合
- Collection values():獲取所有值的集合 Collection c = hm.values(); --> 瞭解
- 轉
08. Map集合的遍歷之鍵找值
- A:鍵找值思路:
- 獲取所有鍵的集合
- 遍歷鍵的集合,獲取到每一個鍵
- 根據鍵找值
-
B:案例演示
-
Map集合的遍歷之鍵找值
for(String key : hm.keySet()){ System.out.println(key + "..." + hm.get(key)); }
keySet() : 返回的是所有鍵的集合
-
09. Map集合的遍歷之鍵值對對象找鍵和值
- A:鍵值對對象找鍵和值思路:
- 獲取所有鍵值對對象的集合
- 遍歷鍵值對對象的集合,獲取到每一個鍵值對對象
- 根據鍵值對對象找鍵和值
- B:案例演示
10. Map集合的兩種遍厲
11. HashMap集合的練習鍵是String值是Student
- 案例演示
需求:Map集合的遍歷
分析:
第一步:定義一個map集合,健是String類型,值是Student類型
第二步:向集合中添加元素
第三步:獲取集合中所有的鍵值對對象
第四步:遍歷所有的健值對對象
第五步:打印集合的鍵和值
12. HashMap集合
13. 集合的嵌套練習之ArrayList嵌套HashMap
- 需求 ArrayList集合嵌套HashMap集合並遍歷。 定義一個ArrayList集合,它包含三個元素,每一個元素都是HashMap類型的。 每一個HashMap集合的鍵和值都是String類型的, 鍵:String 丈夫的姓名 值:String 妻子的姓名 給出如下的字符串數據,請用代碼實現需求。 第一個HashMap集合的元素: 孫策 大喬 周瑜 小喬 第二個HashMap集合的元素: 郭靖 黃蓉 楊過 小龍女 第三個HashMap集合的元素: 令狐沖 任盈盈 林平之 嶽靈珊
14. 集合的嵌套練習之HashMap嵌套ArrayList
- 需求
HashMap集合嵌套ArrayList集合並遍歷。
定義一個HashMap集合,它包含三個元素,每一個元素的鍵是String類型,值是ArrayList類型。
鍵:String 人物來自哪部電視劇
值:ArrayList 人物的名稱
每一個ArrayList集合的數據是String類型的。
給出如下的字符串數據,請用代碼實現需求。
第一個ArrayList集合的元素:(三國演義)
諸葛亮
趙雲
第二個ArrayList集合的元素:(西遊記)
唐僧
孫悟空
第三個ArrayList集合的元素:(水滸傳)
武松
魯智深
LinkedHashMap
- Map集合中,可以保證鍵是唯一的,並且可以保證存取的順序一致
TreeSet
作用: TreeSet集合的作用是用於給集合元素,【排序】
基礎示例:
TreeSet<String> ts = new TreeSet<>();
ts.add("b");
ts.add("c");
ts.add("a");
ts.add("d");
System.out.println(ts);
- 存儲自定義類型:
使用TreeSet集合,存儲自定義類型
*
* 現象:如果自定義類型,沒有做xxxxx, 運行的時候直接報錯,原因:不具備可比性
*
* 重寫了hashCode和equals方法之後,依然報錯
* 結論:TreeSet的排序,跟這兩個方法沒有關係。
*
* 解決過程:
* 1. 讓類實現了Comparable<Person>接口,重寫了 compareTo方法
* return 0 : 集合中只有第一個元素
*
* 2. return 1 :
* [Person [name=張三, age=23], Person [name=李四, age=24], Person [name=王五, age=25]]
*
* 3. return -1:
* [Person [name=王五, age=25], Person [name=李四, age=24], Person [name=張三, age=23]]
*
*
* 思路:
* 要想讓集合中的對象按照自己的意思進行排序,就需要對TreeSet集合的compareTo方法做處理
*
* 結論:
* 正序: this.age - o.age
* 倒序: o.age - this.age
TreeMap
- TreeMap集合的排序, 只針對鍵有效