开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第39天,点击查看活动详情
双列集合的特点
- 双列集合一次需要存一对数据,分别为键和值
- 键不能重复,值可以重复
- 键和值是一一对应的,每一个键只能找到自己对应的值
- 键+值这个整体我们称之为“键值对”或者“键值对对象”,在Java中叫做“Entry对象”
常用API
方法名称 | 说明 |
---|---|
V put(K key,V value) | 添加元素 |
V remoke(Object key) | 根据键删除元素 |
void clear() | 移除所有的键值对元素 |
boolean containsKey(Object Key) | 判断集合是否包含指定的键 |
boolean containsValue(Object value) | 判断集合是否包含指定的值 |
boolean isEmpty() | 判断集合是否为空 |
int Size() | 集合的长度,也就是集合中键值对的个数 |
put方法的细节:
- 在添加数据的时候,如果键不存在,那么直接把键值对对象添加到map集合中
- 在添加数据的时候,如果键是存在的,那么会把原有的键值对对象覆盖,会把被覆盖的值进行返回
Map的遍历方式
键找值
Set<String> keys = map.keySet();
for (String key : keys) {
System.out.println(key);
//利用map集合中的键获取对应的值 get
String value = map.get(key);
System.out.println(value);
}
键值对
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String, String> entry : entries) {
System.out.println(entry.getKey() + "->" + entry.getValue());
}
Lambda表达式
方法名称 | 说明 |
---|---|
default void forEach(BiConsumer<? super K,? super V> action) | 结合Lambda遍历Map |
map.forEach(new BiConsumer<String, String>() {
@Override
public void accept(String key, String value) {
System.out.println(key + "-->" + value);
}
});
简化版
map.forEach((key, value) -> System.out.println(key + "-->" + value));
HashMap
特点:
- HashMap是Map里的一个实现类
- 没有额外的方法,直接使用Map里面的方法就可以了
- 特点都是有键决定的:无序、不重复、无索引
- HashMap跟HashSet底层原理是一模一样的,都是哈希表结构
LinkedHashMap
特点:
- 由键决定:有序、不重复、无索引
- 这里的有序指的是保证存储和取出的元素顺序一致
- 原理:底层数据结构依然是哈希表,只是每个键值对元素又额外的多加了一个双链表的机制记录存储的顺序
TreeMap
特点:
- TreeMap跟TreeSet底层原理一样,都是红黑树结构的
- 由键决定特性:不重复、无索引、可排序
- 可排序:对键进行排序
- 注意:默认按照键的从小到大进行排序,也可以按照自己规定的排序规则 排序规则:
- 实现Comparable接口,指定比较规则
- 创建集合时传递Comparator比较器对象,指定比较规则