认识Map集合
Map集合体系特点
方法
代码示例
package com.zz.Map;
import java.util.*;
public class Test {
public static void main(String args[]){
Map<String, Integer> map = new HashMap <>();//经典代码,按照键 无序 不重复 无索引
map.put("手表", 100);
map.put("手表", 134);//后面重复的数据会覆盖前面的数据(键)
map.put("手机", 243);
System.out.println(map);
System.out.println("=====");
Map<Integer, String> map1 = new TreeMap <>();//可排序,不重复,无索引
map1.put(23, "java");
map1.put(400, "cat");
map1.put(35, "dog");
System.out.println(map1);
//2.public int size()获取集合的大小
System.out.println(map.size());
//3.public void clear()清空集合
//map.clear();
System.out.println(map);
//4.public boolean isEmpty():判断集合是否为空,为空则返回true,反之
System.out.println(map.isEmpty());
//5.public V get(Object key)根据键获取对应值,不存在该键,则返回null
int v1 = map.get("手表");
System.out.println(v1);
//6.public V remove(Object key)根据键删除整个元素(删除键会返回键的值)
System.out.println(map.remove("手表"));
System.out.println(map);
//7.public boolean containsKey(Object key)判断是否包含某个键,为真返回true,否则返回false
System.out.println(map.containsKey("手机"));//true
System.out.println(map.containsKey("手表"));//false
//8.public boolean containsValue(Object value):判断是否包含某个值
System.out.println(map.containsValue(2));//false
System.out.println(map.containsValue(243));//true
//9.public Set<K> keySet():获取Map集合的全部键
Set<String> keys = map.keySet();
System.out.println(keys);
//10.public Collection<V> values():获取Map集合的全部值
Collection<Integer> values = map.values();
System.out.println(values);
//11.把其他Map集合的数据全部导入到自己的集合中来(扩展)
Map<String, Integer> map2 = new HashMap <>();
map2.put("java", 10);
map2.put("操作系统", 20);
Map<String, Integer> map3 = new HashMap <>();
map3.put("数据库", 12);
map3.put("计算机组成原理", 89);
map2.putAll(map3);//putAll 把map3中的元素全部导入一份到map2集合中
System.out.println(map2);
System.out.println(map3);
}
}
遍历
方式一:键找值
package com.zz.Map.Map;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Test2 {
public static void main(String args[]){
//准备一个Map集合
Map<String, Double> map = new HashMap<>();
map.put("牛魔王", 187.4);
map.put("铁扇公主", 170.4);
map.put("孙悟空", 156.7);
map.put("唐僧", 179.4);
System.out.println(map);
//获取所有键
Set<String> keys = map.keySet();
System.out.println(keys);
//根据键获取对应值
for(String key : keys){
double value = map.get(key);
System.out.println(key + "=>" + value);
}
}
}
方式二:键值对
//2.调用Map集合提供entrySet方法,把Map集合转换成键值对类型的Set集合
Set<Map.Entry<String, Double>> entries = map.entrySet();
for(Map.Entry<String, Double> entry : entries){
String key = entry.getKey();
double value = entry.getValue();
System.out.println(key + "=>" + value);
}
方式三:Lambda(推荐)JDK8才开始有
//方式三Lambda遍历
map.forEach((k, v)->{
System.out.println(k + "->" + v);
});
上面Lambda的原本代码形式
map.forEach(new BiConsumer <String, Double>() {
@Override
public void accept(String k, Double v) {
System.out.println(k + "=>" + v);
}
});
Map集合案例
Map集合投票统计代码示例
package com.zz.Map.vote;
import java.util.*;
public class Test {
public static void main(String args[]){
//1.将80个学生选择的景点数据拿到程序中来
List<String> data = new ArrayList <>();
String[] selects = {"A", "B", "C", "D"};
Random r = new Random();
for(int i = 1; i <= 80; i++){
//每次模拟一个学生选择一个景点,存入到集合中去
int index = r.nextInt(4);//0,1,2,3
data.add(selects[index]);
}
System.out.println(data);
//2.开始统计每个景点的投票人数
//准备一个Map集合用于统计最终的结果
Map<String, Integer> result = new HashMap<>();
//3.开始遍历学生选择的景点数据
for (String s : data){
//判断该Map集合中是否存在该景点
if(result.containsKey(s)){
//说明这个景点之前统计过,其值+1,存入到Map集合中
result.put(s, result.get(s) + 1);
}else{
//说明这个景点未被统计过,存入(景点=1)
result.put(s, 1);
}
}
System.out.println(result);
}
}
HashMap
根据键的哈希值计算位置,和值无关
LinkedHashMap集合
将键:值封装成entry对象
TreeMap集合
集合的嵌套
一个集合中嵌套另外一个集合
package com.zz.Map.province;
import java.util.*;
public class Test {
public static void main(String args[]){
//1.定义一个Map集合存储全部的省份信息,其对应的城市信息
Map<String, List<String>> map = new HashMap<>();
List<String> cities1 = new ArrayList <>();
Collections.addAll(cities1, "南京市", "苏州市", "扬州市");
map.put("江苏省", cities1);
List<String> cities2 = new ArrayList <>();
Collections.addAll(cities2, "抚州市", "南昌市", "九江市");
map.put("江西省", cities2);
System.out.println(map);
//获取对应省份的城市信息
List<String> list = map.get("江西省");
for (String city : list) {
System.out.println(city);
}
//获取所有省份对应的城市信息
map.forEach((p, c)->{
System.out.println(p + "=>" + c);
});
}
}