1.Map集合的概述
Map集合是一种双列集合,每个元素包含两个数据。
Map集合的每个元素的格式:key=value(键值对元素)。
Map集合也被称为“键值对集合”。
使用最多的Map集合是HashMap。
2.HashMap的使用
HashMap:元素按照键是无序,不重复,无索引,值不做要求。
package boke;
import java.util.HashMap;
import java.util.Map;
public class HashMapDome {
public static void main(String[] args) {
//1、创建一个对象
Map<String, Integer> maps = new HashMap<>();
maps.put("苹果", 3);
maps.put("梨", 5);
maps.put("橘子", 1);
maps.put("苹果", 10);
System.out.println(maps);
}
}
运行结果:
3.LinkedHashMap的使用
LinkedHashMap:元素按照键是有序,不重复,无索引,值不做要求。
package boke;
import java.util.LinkedHashMap;
import java.util.Map;
public class LinkedHashMapDome {
public static void main(String[] args) {
//1、创建一个对象
Map<String,Integer> maps=new LinkedHashMap<>();
maps.put("苹果",3);
maps.put("梨",5);
maps.put("橘子",1);
maps.put("苹果",10);
maps.put("香蕉",100);
System.out.println(maps);
}
}
4.Map集合的常用api
package boke;
import java.util.HashMap;
public class HashMapApi {
public static void main(String[] args) {
//创建HashMap
//容量16,负载系数:0.75
HashMap map = new HashMap();
//添加元素
map.put("k1","v1");
map.put("k2","v2");
System.out.println(map);
map.put("k1","v100"); //key存在:value覆盖, 修改
System.out.println(map);
//putAll(Map) 把另外一个Map的数据添加到本Map
HashMap map2 = new HashMap();
map2.put("hello","world");
map2.putAll(map);
System.out.println(map2);
//putIfAbsent(key,value): 如果key不存在, 添加, 如果存在,不执行任何操作
map.putIfAbsent("k5","v5"); //key不存在, 添加
map.putIfAbsent("k5","v500"); //key存在,不执行任何操作
System.out.println(map);
//删除 remove(key) 返回删除value, 如果key不存在, 返回: null
Object val = map.remove("k1");
System.out.println(val);
System.out.println(map);
// remove(key,value) 删除 key,value全部一样的删除
boolean isOk = map.remove("k2", "v2");
System.out.println(isOk);
System.out.println(map);
//clear() 清空
map2.clear();
System.out.println(map2);
//查询
//Object get(key) 根据key得到value
//如果key不存在,返回null
System.out.println(map.get("k5"));
System.out.println(map.get("k6"));
//getOrDefault(key,默认值) 根据key得到value
//如果key不存在,返回默认值
System.out.println(map.getOrDefault("k5","默认值"));
System.out.println(map.getOrDefault("k6","默认值"));
//判断
//判断key是否存在 containsKey(key)
System.out.println(map.containsKey("k5"));
System.out.println(map.containsKey("k6"));
//判断value是否存在 containsValue(vlaue)
System.out.println(map.containsValue("v5"));
System.out.println(map.containsValue("v6"));
//判断集合是否map isEmpty()
System.out.println(map.isEmpty());
System.out.println(map2.isEmpty());
//获取元素个数 size()
System.out.println(map.size());
}
}
5.遍历Map集合
三种遍历方法:
方式一:键找值
先获取Map集合的全部键的Set集合
遍历键的Set集合,然后通过键提取对应值
-
package boke; import java.util.HashMap; import java.util.Map; import java.util.Set; public class MapDome { public static void main(String[] args) { Map<String,Integer> map = new HashMap<>(); map.put("华为",5999); map.put("荣耀",2999); map.put("小米",3999); map.put("苹果",7999); System.out.println(map); // 第一步,现获取Map集合的全部键的Set集合 Set<String> keys = map.keySet(); //遍历键的Set集合 通过键获取对应的值 for (String key : keys) { int value = map.get(key); System.out.println(key+"---->"+value); } } }
方式二:键值对
先把Map集合转换成Set集合,Set集合中每个元素都是键值对实体类型
遍历Set集合,然后提取键以及提取值
package boke;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapDome2 {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<>();
map.put("华为",5999);
map.put("荣耀",2999);
map.put("小米",3999);
map.put("苹果",7999);
System.out.println(map);
//第一步 将Map集合里面的键值对作为整体 也就是作为键值对类型 通过entrySet方法提取到Set集合中
Set<Map.Entry<String, Integer>> entries = map.entrySet();
// Set<Map.Entry<String, Integer>> entries = [(华为=5999),(荣耀=2999),(小米=3999),(苹果=7999)]
//第二步:通过foreach循环 , 遍历提取到的Set集合 , 分别提取键和值
for (Map.Entry<String, Integer> entry : entries) {
String key = entry.getKey();
int value = entry.getValue();
System.out.println(key+"---->"+value);
}
}
}
方式三:lambda表达式
package boke;
import java.util.HashMap;
import java.util.Map;
public class MapDome3 {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<>();
map.put("华为",5999);
map.put("荣耀",2999);
map.put("小米",3999);
map.put("苹果",7999);
System.out.println(map);
//map.forEach(new BiConsumer<String, Integer>() {
// @Override
// public void accept(String key, Integer value) {
// System.out.println(key+"---->"+value);
// }
// })
//简化写法
map.forEach((key, value) -> System.out.println(key+"---->"+value));
}
}