## Map 的本质是一个带了查找功能的 `List<Entry>`
```java
ImmutableMap<Long, PreRunTabItem> dataMap = Maps.uniqueIndex(lastChoice, PreRunTabItem::getId);
```
## computeIfAbsent 是分了三段
```java
strategyMap.computeIfAbsent(*****).add(strategy);
```
[HashMap](HashMap.md)
Hashtable在实现Map接口时保证了线程安全性,而HashMap则是非线程安全的。
**
Hashtable不允许存入null,无论是以null作为key或value,都会引发异常。
而HashMap是允许存入null的,无论是以null作为key或value,都是可以的。
## 判空
[判空](判空.md)
## 通过 OrDefault 避免大量的判空
```java
Set<String> roomSet = hotelMap.getOrDefault("all", hotelMap.getOrDefault(hotelSeq, Sets.newHashSet()));
```
在 com.google.common.collect.ImmutableMap 中,无论是键(key)还是值(value)都不能为 null。这种设计有其特定的原因和优势:
- [不可变的](不可变的.md)和线程安全:
- ImmutableMap 设计为完全不可变的数据结构。
- 禁止 null 值有助于保证其[不可变的](不可变的.md)和线程安全性。
- 防止 NullPointerException:
- 不允许 null 可以在使用时避免许多潜在的 NullPointerException。
- 使用者可以确信从 map 中获取的值永远不会是 null。