一、介绍
概念
- Map集合是一种双列集合,每个元素包含两个数据。
- 元素格式:【key=value】键值对元素
- Map又称为 “键值对集合”
Map集合格式: {key1=value1,key2=value2,key3=value3,…}
二、Map集合的特点
Map家族图
1、说明:
- 使用最多的Map集合是HashMap。
- 重点是HashMap、LinkedHashMap,TreeMap。
2、体系特点:
- 由键决定获取的值。
- Map的键是无序、不重复、无索引的,值不做要求。
- Map重复键相继覆盖前面的键值。
- Map的键值对都可以为null。
三、Map集合API
由于Map集合是双列集合的父接口,它的功能为所有双列集合通用功能。
常用方法API
方法 | 说明 |
---|---|
V put(K key,V value) | 添加元素 |
V remove(Object key) | 根据键删除元素 |
V get(Object key) | 根据键获取元素 |
void clear() | 清空集合 |
boolean containsKey(Object key) | 判断集合中是否包含指定的键 |
boolean containsValue(Object value) | 判断集合中是否包含指定的值 |
Set keySet() | 获取集合中所有的键 |
Collection values() | 获取集合中所有的值 |
boolean isEmpty() | 判断集合是否为空 |
int size() | 获取集合长度 |
Map<K,V> putAll(Map<K,V> M) | 合并集合 |
四、Map的遍历方法
1、键找值
主要用于对象-value的键值对集合。
(1)流程
- 获取键列表【Map.keySet()】
- 根据键查找值【Map.get(key)】
(2)示例
class Main{
public static void main(String[] args) {
/*查找商品名为goods3的价格是多少?*/
Map<String,Double> map = new HashMap<>();
map.put("goods1",30.7);
map.put("goods2",62.5);
map.put("goods3",20.8);
map.put("goods4",78.5);
for (String key : map.keySet()) {
if (key.equals("goods3")){
System.out.println(map.get(key));
break;
}
}
}
}
/*打印结果*/
20.8
2、键值对
主要用于对象-value的键值对集合。
(1)流程
- 获取所有键值对对象集合 【Set<Map.Entry<K,V>> entrySet()】
- 获取键【K getKey()】
- 获取值【V getValue()】
(2)示例
Map<String,Double> map = new HashMap<>();
map.put("goods1",30.7);
map.put("goods2",62.5);
map.put("goods3",20.8);
map.put("goods4",78.5);
/*获取键值对对象*/
Set<Map.Entry<String, Double>> entries = map.entrySet();
/*遍历获取键与值*/
for (Map.Entry<String, Double> entry : entries) {
System.out.println(entry.getKey() + "==>" + entry.getValue());
}
/*打印结果*/
goods1==>30.7
goods4==>78.5
goods3==>20.8
goods2==>62.5
3、lambda表达式
(1)示例
Map<String,Double> map = new HashMap<>();
map.put("goods1",30.7);
map.put("goods2",62.5);
map.put("goods3",20.8);
map.put("goods4",78.5);
map.forEach((k,v)-> System.out.println(k + "==>" + v));
/*打印结果*/
goods1==>30.7
goods4==>78.5
goods3==>20.8
goods2==>62.5
五、Map的三种实现类
1、HashMap
特点: 无序、不重复、无索引,依赖hashCode()和equals()保证键的唯一。若键要存储自定义对象,需要重写hashCode()和equals()。
底层: Hash表,每个元素包含两个数据
2、LinkedHashMap
特点: 有序、不重复、无索引,保证存储和取出的元素顺序一致。
底层: Hash表,双链表机制记录存储顺序。
3、TreeMap
特点: 可排序、不重复、无索引,只对键数据默认升序排序或自定义排序。
底层: 与TreeSet底层相同。
实现排序的方式:
- 类实现Comparable接口
- 集合自定义Comparator比较器