? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1.Map概述
A:Map接口概述
查看API可以知道:
將鍵映射到值的對象
一個映射不能包含重復(fù)的鍵
每個鍵最多只能映射到一個值
簡而言之,一個key值對應(yīng)著一個value,多個value可以對應(yīng)著一個key
B:Map接口和Collection接口的不同
Map是雙列的,Collection是單列的
Map的鍵唯一,Collection的子體系Set是唯一的
Map集合的數(shù)據(jù)結(jié)構(gòu)指針對鍵有效冀偶,跟值無關(guān);Collection集合的數(shù)據(jù)結(jié)構(gòu)是針對元素有效
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.Map的CRUD
A:Map集合的功能概述
a:添加功能
V put(K key,V value):添加元素址愿。
如果鍵是第一次存儲节预,就直接存儲元素,返回null
如果鍵不是第一次存在鹉动,就用值把以前的值替換掉,返回以前的值
java public static void add() { Map<String,String> map = new HashMap<>(); map.put("1233", "lisi"); map.put("13", "lisi1"); map.put("134", "lisi2"); map.put("134", "lis"); }
b:刪除功能
void clear():移除所有的鍵值對元素
V remove(Object key):根據(jù)鍵刪除鍵值對元素,并把值返回
```java public static void add() { Map<String,String> map = new HashMap<>(); map.put("1233", "lisi"); map.put("13", "lisi1"); map.put("134", "lisi2"); map.put("134", "lis");
? ? map.clear();
? ? String string = map.remove("13");
}
```
c:判斷功能
boolean containsKey(Object key):判斷容器是否包含指定的鍵
boolean containsValue(Object value):判斷容器是否包含指定的值
boolean isEmpty():判斷容器是否為空
```java public static void add() { Map<String,String> map = new HashMap<>(); map.put("1233", "lisi"); map.put("13", "lisi1"); map.put("134", "lisi2"); map.put("134", "lis");
? ? boolean key = map.containsKey("13");
? ? boolean value = map.containsValue("lisi");
? ? System.out.println(key);
? ? System.out.println(value);
}
```
d:獲取功能
Set<Map.Entry<K,V>> entrySet():
```java public static void add() { Map<String,String> map = new HashMap<>(); map.put("1233", "lisi"); map.put("13", "lisi1"); map.put("134", "lisi2"); map.put("134", "lis");
? ? Set<Entry<String,String>> set = map.entrySet();
? ? for (Entry<String, String> entry : set) {
? ? ? ? System.out.println(entry.getKey() + ":" + entry.getValue());
? ? }
} ```
V get(Object key):根據(jù)鍵獲取值
java public static void add() { Map<String,String> map = new HashMap<>(); map.put("1233", "lisi"); map.put("13", "lisi1"); map.put("134", "lisi2"); map.put("134", "lis"); String string = map.get("123"); System.out.println(string); }
Set?keySet():獲取容器中所有鍵的容器
```java public static void add() { Map<String,String> map = new HashMap<>(); map.put("1233", "lisi"); map.put("13", "lisi1"); map.put("134", "lisi2"); map.put("134", "lis");
? ? Set<String> set = map.keySet();
? ? for (String string : set) {
? ? ? ? map.get(string);
? ? }
} ```
Collection?values():獲取容器中所有值的容器
```java public static void add() { Map<String,String> map = new HashMap<>(); map.put("1233", "lisi"); map.put("13", "lisi1"); map.put("134", "lisi2"); map.put("134", "lis");
? ? Collection<String> values = map.values();
}
```
e:長度功能
int size():返回容器中的鍵值對的個數(shù)
3.Map集合的遍歷之鍵找值
A:鍵找值思路:
獲取所有鍵的容器
遍歷鍵的容器懈玻,獲取到每一個鍵
根據(jù)鍵找值
B:案例演示
Map集合的遍歷之鍵找值
```java
public static void add() { Map<String,String> map = new HashMap<>(); map.put("1233", "lisi"); map.put("13", "lisi1"); map.put("134", "lisi2"); map.put("134", "lis");
? ? Set<String> set = map.keySet();
? ? for (String string : set) {
? ? ? ? map.get(string);
? ? }
}
```
?
4.Map集合的遍歷之鍵值對對象找鍵和值
A:鍵值對對象找鍵和值思路:
獲取所有鍵值對對象的容器
遍歷鍵值對對象的容器,獲取到每一個鍵值對對象
根據(jù)鍵值對對象找鍵和值
B:案例演示
Map集合的遍歷之鍵值對對象找鍵和值
? ? public static void add() {
? ? ? ? Map<String,String> map = new HashMap<>();
? ? ? ? map.put("1233", "lisi");
? ? ? ? map.put("13", "lisi1");
? ? ? ? map.put("134", "lisi2");
? ? ? ? map.put("134", "lis");
? ? ? ? Set<Entry<String,String>> set = map.entrySet();
? ? ? ? for (Entry<String, String> entry : set) {
? ? ? ? }
? ? }
5.HashMap集合鍵是String值是Student的案例
A:案例演示
HashMap集合鍵是Student值是String的案例
```java public static void add() { Map<String, Student> map = new HashMap<>(); Student student = new Student(1, "lisi"); map.put(student.getId()+"", student);
} ```
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?6.LinkedHashMap的概述和使用
A:案例演示
LinkedHashMap的特點(diǎn)
底層是鏈表實(shí)現(xiàn)的可以保證怎么存就怎么取
7.TreeMap集合鍵是Student值是String的案例
A:案例演示
TreeMap集合鍵是Student值是String的案例(會對key值排序)
8.統(tǒng)計(jì)字符串中每個字符出現(xiàn)的次數(shù)
A:案例演示
需求:統(tǒng)計(jì)字符串中每個字符出現(xiàn)的次數(shù)
9.容器嵌套之HashMap嵌套HashMap
A:案例演示
容器嵌套之HashMap嵌套HashMap
10.HashMap和Hashtable的區(qū)別
A:面試題
HashMap和Hashtable的區(qū)別
Hashtable是JDK1.0版本出現(xiàn)的,是線程安全的,效率低,HashMap是JDK1.2版本出現(xiàn)的,是線程不安全的,效率高
Hashtable不可以存儲null鍵和null值,HashMap可以存儲null鍵和null值
B:案例演示
HashMap和Hashtable的區(qū)別
? ? ? ? ? ? ? ? ? ? ? ? ? ??? ?
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? TreeMap: