1.Map概述
A:Map接口概述
查看API可以知道:
将键映射到值的对象
一个映射不能包含重复的键
每个键最多只能映射到一个值
简而言之,一个key值对应着一个value,多个value可以对应着一个key
B:Map接口和Collection接口的不同
Map是双列的,Collection是单列的
Map的键唯一,Collection的子体系Set是唯一的
Map集合的数据结构指针对键有效,跟值无关;Collection集合的数据结构是针对元素有效
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):根据键删除键值对元素,并把值返回
```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):根据键获取值
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():返回容器中的键值对的个数
3.Map集合的遍历之键找值
A:键找值思路:
获取所有键的容器
遍历键的容器,获取到每一个键
根据键找值
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:键值对对象找键和值思路:
获取所有键值对对象的容器
遍历键值对对象的容器,获取到每一个键值对对象
根据键值对对象找键和值
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的特点
底层是链表实现的可以保证怎么存就怎么取
7.TreeMap集合键是Student值是String的案例
A:案例演示
TreeMap集合键是Student值是String的案例(会对key值排序)
8.统计字符串中每个字符出现的次数
A:案例演示
需求:统计字符串中每个字符出现的次数
9.容器嵌套之HashMap嵌套HashMap
A:案例演示
容器嵌套之HashMap嵌套HashMap
10.HashMap和Hashtable的区别
A:面试题
HashMap和Hashtable的区别
Hashtable是JDK1.0版本出现的,是线程安全的,效率低,HashMap是JDK1.2版本出现的,是线程不安全的,效率高
Hashtable不可以存储null键和null值,HashMap可以存储null键和null值
B:案例演示
HashMap和Hashtable的区别
TreeMap: