Map概述
Map是双列集合,Map集合中的每一个元素是以key=value
的形式存在的,一个key=value
就称之为一个键值对,而且在Java中有一个类叫Entry类,Entry的对象用来表示键值对对象。
特点:键不能重复,值可以重复,每一个键只能找到自己对应的值。
Map集合也有很多种,在Java中使用不同的类来表示的,每一种Map集合其键的特点是有些差异的,值是键的一个附属值,所以我们只关注键的特点就可以了。
package com.itcast.prepare;
import java.util.HashMap;
import java.util.Map;
public class Demo11 {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();//有序,不重复,无索引;
map.put("java", 15000);
map.put("java", 10000);//后面重复的会覆盖前面的数据(键)
map.put("python", 12000);
map.put("goLang",20000);
map.put("php", 8000);
map.put("mull",null);
System.out.println(map);
Map<Integer,String> map1 = new HashMap<>();//可排序,不重复,无索引;
map1.put(23,"java");
map1.put(29,"goLang");
map1.put(35,"java");
map1.put(23,"php");
map1.put(18,"python");
System.out.println(map1);
}
}
Map集合的特点
Map集合系列都是由键决定的,值只是一个附属值,值不做要求;
- HashMap:由键决定特点,无序,不重复,无索引;(用的较多)
- LinkedHashMap:由键决定特点,有序,不重复,无索引。
- TreeMap:由键决定特点,按照大小默认升序排列、不重复,无索引;
Map集合的常用方法
package com.itcast.prepare;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Demo12 {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<>();
//添加元素
map.put("华为",2500);
map.put("苹果",15000);
map.put("锤子",1500);
map.put("小米",3500);
map.put("1+",1800);
map.put("vovi",1500);
map.put("红米",1500);
map.put("OPPO",1600);
map.put("华为",2500);
System.out.println(map);
//获取集合的长度
System.out.println(map.size());
//清空集合
// map.clear();
//判断集合是否为空,空返回true
System.out.println(map.isEmpty());
//根据键获取对应值
System.out.println(map.get("华为"));
//根据键删除整个元素
System.out.println(map.remove("华为"));
//判断是否包含某个键
System.out.println(map.containsKey("华为"));
//判断是否包含某个值
System.out.println(map.containsValue(2500));
//获取全部键的值
Set<String> set = map.keySet();
System.out.println(set);
//获取map集合的全部值
Collection<Integer> values = map.values();
System.out.println(values);
}
}
把一个Map集合添加到另一个Map集合中
// 11.把其他Map集合的数据倒入到自己集合中来。
Map<String, Integer> map1 = new HashMap<>();
map1.put("java1", 10);
map1.put("java2", 20);
Map<String, Integer> map2 = new HashMap<>();
map2.put("java3", 10);
map2.put("java2", 222);
map1.putAll(map2); // putAll:把map2集合中的元素全部倒入一份到map1集合中去。
System.out.println(map1);
System.out.println(map2);
Map集合遍历
- 先遍历集合的所有键的值,在遍历集合的所有values
用到方法:keyset(),get(key)
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Demo13 {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<>();
//添加元素
map.put("华为",2500);
map.put("苹果",15000);
map.put("锤子",1500);
map.put("小米",3500);
map.put("1+",1800);
map.put("vovi",1500);
map.put("红米",1500);
map.put("OPPO",1600);
map.put("华为",2500);
System.out.println(map);
//先得到所有键
Set<String> key = map.keySet();
System.out.println(key);
//遍历所有的键
for (String keys : key){
Integer vlues = map.get(keys);//获得每一个键对应的值
System.out.println(keys + "--------->" + vlues);
}
}
}
2. Entry对象遍历
Map集合的第二种方式,是直接获取每一个Entry对象,把Entry存储扫Set集合中去,再通过Entry对象获取键和值。
调用Map集合的entrySet方法,将Map转换成Set集合
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Demo13 {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<>();
//添加元素
map.put("华为",2500);
map.put("苹果",15000);
map.put("锤子",1500);
map.put("小米",3500);
map.put("1+",1800);
map.put("vovi",1500);
map.put("红米",1500);
map.put("OPPO",1600);
map.put("华为",2500);
System.out.println(map);
//调用Map集合的entrySet方法,将Map转换成Set集合
Set<Map.Entry<String, Integer>> set = map.entrySet();
for (Map.Entry<String, Integer> stringIntegerEntry : set) {
System.out.println(stringIntegerEntry);
}
}
}
3.foreach搭配lambda(JDK8之后的新特性)
map.forEach(new BiConsumer<String, Integer>() {//匿名内部类
@Override
public void accept(String k, Integer v) {
System.out.println(k + "----->" + v);
}
});
//Lambda表达式
map.forEach((k,v) -> System.out.println(k + "----->" + v));
}
}