一,常用API
添加,清空,判断是否为空,根据键获取值,根据键删除整个元素,判读是否包含某个键/值,获取全部键/值的集合,集合的大小
package Map;
import java.util.*;
public class Map1 {
public static void main(String[] args) {
//1.创建一个Map集合对象
Map<String, Integer> maps=new HashMap<>();
// Map<String, Integer> maps=new LinkedHashMap<>();
maps.put("aa",3);
maps.put("bb",99);
maps.put("cc",100);
maps.put("aa",66);//覆盖
maps.put("dd",110);
maps.put(null,null);
System.out.println(maps);
//2.清空集合
// maps.clear();
// System.out.println(maps);
//3.判断集合是否为空,为空返回true,反之false
System.out.println(maps.isEmpty());
//4.根据键获取对应值
Integer key= maps.get("aa");
System.out.println(key);
System.out.println(maps.get("bb"));
System.out.println(maps.get("bb1"));//null
//5.根据键删除整个元素(删除键会返回键的值)
System.out.println(maps.remove("dd"));
System.out.println(maps);
//6.判断是否包含某个键,包含返回true
System.out.println(maps.containsKey("aa"));
System.out.println(maps.containsKey("ee"));
//7.判断是否包含某个值,包含返回true
System.out.println(maps.containsValue(100));
System.out.println("===========================");
//8.获取全部键的集合
Set<String> keys=maps.keySet();
System.out.println(keys);
//9.获取全部值得集合
Collection<Integer> values=maps.values();
System.out.println(values);
//10.集合的大小
System.out.println(maps.size());
//11.合并其他Map集合
Map<String,Integer> map1=new HashMap<>();
map1.put("java1",1);
map1.put("java2",9);
Map<String,Integer> map2=new HashMap<>();
map1.put("java2",100);
map1.put("java3",9900);
map1.putAll(map2);//把集合map2拷贝一份到map1,但是map2还有
System.out.println(map1);
System.out.println(map2);
}
}
二,Map集合遍历
1.键找值(推荐)
单个取
import java.util.Map;
import java.util.Set;
public class Map2 {
public static void main(String[] args) {
Map<String, Integer> maps=new HashMap<>();
maps.put("aa",3);
maps.put("bb",99);
maps.put("cc",100);
maps.put("dd",110);
System.out.println(maps);
//1.键找值,先拿到集合的全部键
Set<String> keys=maps.keySet();
//2.遍历每个键,根据键提取值
for (String key : keys) {
int value=maps.get(key);
System.out.println(key+"======>"+value);
}
}
}
========================================================
2.键值对
面向对象,先取出键值对再分别取
package Map;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Map3 {
public static void main(String[] args) {
Map<String, Integer> maps=new HashMap<>();
maps.put("aa",3);
maps.put("bb",99);
maps.put("cc",100);
maps.put("dd",110);
System.out.println(maps);
//1.把Map集合转换成Set集合
Set<Map.Entry<String, Integer>> entries = maps.entrySet();
//2.开始遍历
for (Map.Entry<String, Integer> entry:entries){
String key=entry.getKey();
int value=entry.getValue();
System.out.println(key+"=====>"+value);
}
}
}
===========================================
3.Lambda (推荐)
package Map;
import java.util.HashMap;
import java.util.Map;
import java.util.function.BiConsumer;
public class Map4 {
public static void main(String[] args) {
Map<String, Integer> maps=new HashMap<>();
maps.put("aa",3);
maps.put("bb",99);
maps.put("cc",100);
maps.put("dd",110);
System.out.println(maps);
// maps.forEach(new BiConsumer<String, Integer>() {
// @Override
// public void accept(String key, Integer value) {
// System.out.println(key+"====>"+value);
// }
// });
maps.forEach(( key, value)-> {
System.out.println(key+"====>"+value);
});
}
}
=====================================================================
需求:80个学生从ABCD四个景点选一个,票数最高的景点得选,统计四个景点的票数
分析:因为一个景点对应一个票数,就像键值对,所以用Map集合存储统计结果,其中,遍历80个数据时,要看这个集合里是否存在,如果不存在就存进去并让数据=1,否则直接让数据+1即可
这里没有80个数据,所以让系统随机生成,拼接到一起形成字符串
package Map;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
public class t1 {
public static void main(String[] args) {
//1.生成80个数据
String[] selects={"A","B","C","D"};
StringBuilder sb=new StringBuilder();
Random r=new Random();
for (int i = 0; i < 80; i++) {
sb.append(selects[r.nextInt(selects.length)]);
}
System.out.println(sb);
//2.定义一个Map集合记录统计结果
Map<Character,Integer> ss=new HashMap<>();
//判断是否存在
for (int i = 0; i < 80; i++) {
//提取当前选择的字符
char ch=sb.charAt(i);
if(ss.containsKey(ch)){
//如果存在键,加一
ss.put(ch,ss.get(ch)+1);
}else{
//如果不存在,存入
ss.put(ch,1);
}
}
System.out.println(ss);
}
}
=========================
补充:依赖hashcode和equals方法保证 键 的唯一
如果键要存储的是自定义对象,需要重写hashcode和equals方法