什么是Map集合
Map是一种双列集合,即每一个元素中包含两个数据
元素的格式 key=value
Map集合同样也被称为键值对
Map集合特点
Map集合的键都是无序,不重复,无索引,值不做要求
Map集合后面新加的的键的对应的值会覆盖掉前面重复的键的值
Map集合的键值对都可以为null
Map和Set的关系
set系列的底层就是Map集合实现的
以下是几个set构造器的源码
public HashSet() {
map = new HashMap<>();
}
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
public TreeSet() {
this(new TreeMap<>());
}
几个常见的Map实现类
HashMap
无序,不重复,无索引,值不做要求
HashMap的底层原理和HashSet相同,都是Hash表结构
只不过HashMap的每个元素有两个值
LinkedHashMap
有序,不重复,无索引,值不做要求
底层原理是在Hash表的基础上有加了一个双链表
TreeMap
排序,不重复,无索引,值不做要求
底层原理是Hash表加双链表再加上红黑树优化
Map集合的几个常用API
public static void main(String[] args) {
Map<String,Integer> map=new HashMap<>();
//添加元素
map.put("田所",114514);
map.put("浩二",1919810);
map.put("小明",123456);
map.put("张三",114514);
System.out.println(map);
//根据键删除对应元素
map.remove("小明");
System.out.println(map);
//清空Map
//map.clear();
//判断Map是否为空,空返回true
boolean flag=map.isEmpty();
System.out.println(flag);
//判断集合是否包含指定键
boolean flag1=map.containsKey("小明");
boolean flag2=map.containsKey("张三");
System.out.println(flag1);
System.out.println(flag2);
//判断集合是否包含指定值
boolean flag3=map.containsValue(114514);
boolean flag4=map.containsValue(114);
System.out.println(flag3);
System.out.println(flag4);
//返回集合中的元素个数,即键值对个数
int size= map.size();
System.out.println(size);
}
运行结果
Map集合的遍历
方法一
先将map中所有的键值放入到一个set集合中,通过遍历这个set集合的值,同时通过键找值,从而实现了Map集合的遍历
public static void main(String[] args) {
Map<String,Integer> map=new HashMap<>();
map.put("田所",114514);
map.put("浩二",1919810);
map.put("小明",123456);
map.put("张三",114514);
Set<String> sets=map.keySet();
for (String set : sets) {
System.out.println(set+"========>"+map.get(set));
}
}
方法二
将Map集合转换成一个键值对对象的set的集合,然后遍历set集合
public static void main(String[] args) {
Map<String,Integer> map=new HashMap<>();
map.put("田所",114514);
map.put("浩二",1919810);
map.put("小明",123456);
map.put("张三",114514);
Set<Map.Entry<String,Integer>> entries=map.entrySet();
for (Map.Entry<String, Integer> entry : entries) {
System.out.println(entry.getKey()+"=======>"+entry.getValue());
}
}
方法三
使用Map自带的遍历方法
public static void main(String[] args) {
Map<String,Integer> map=new HashMap<>();
map.put("田所",114514);
map.put("浩二",1919810);
map.put("小明",123456);
map.put("张三",114514);
/*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));
}