Map接口特点(JDK8的Map接口特点)
Map中key不可以重复,原因和HashSet一样,重复了后面添加的会覆盖前面添加的数据
Map中key可以为null,但只能有一个,因为后面添加的数据会覆盖前面添加的数据,value为null,可以有多个
key和value为一对一关系,通过key总能找到对应的value
常用类String类作为Map的key
Map与Collection并列存在。用于保存具有映射关系的数据:Key - Value
import java.util.HashMap;
import java.util.Map;
public class Map01 {
public static void main(String[] args) {
//创建对象,父类引用指向子类
Map map = new HashMap();
//添加数据
map.put("Jack",18);
map.put("Tom",18);
map.put("Jack",20); //覆盖map.put("Jack",18);
map.put("",20);
map.put("",25);
map.put("CiCi","");
map.put("XiXi","");
map.put(new Object(),"大山");
System.out.println(map.get("Jack"));
System.out.println(map);
}
}
Map存放数据的key - value示意图,一对k-v是放在一个Node的,有因为Node实现了Entry接口,有些书上也说 一堆k-v就是一个Entry
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class MapSource {
public static void main(String[] args) {
//创建对象,父类引用指向子类
Map map = new HashMap();
//添加数据
map.put("Jack",18);
map.put("Tom",18);
map.put(new Car(),new Person());
//1.K-V 最后是HashMap$Node node = newNode(hash, key, value, null)
//2.K-V 为了方便程序员的遍历,还会常见EntrySet 集合,该集合存放的元素的类型 Entry,而一个Entry
// 对象就有K,V EntrySet 即: transient Set> entrySet;
//3.entrySet 中,定义的类型是Map.Entry,但是实际上存放的还是 HashMap$Node
// 这时因为static class Node implements Map.Entry
//4.当把 HashMap$Node 对象 存放到 entrySet 就方便我们的比哪里,因为 Map.Entry 提供了重要的方法
// K getKey(); V getValue();
Set set = map.entrySet();
System.out.println(set.getClass());
for (Object o : set) {
System.out.println(o.getClass());
//向下转型
Map.Entry entry = (Map.Entry) o;
System.out.println(entry.getClass());
System.out.println(entry.getKey()+ " - "+entry.getValue());
}
//获取Key
Set set1 = map.keySet();
System.out.println(set1);
//获取Value
Collection values = map.values();
System.out.println(values);
}
}
class Car{
}
class Person{
}
Map接口方法
Map体系图
import java.util.HashMap;
public class MapMethod {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
//put 添加
hashMap.put("Jack","18");
hashMap.put("Tom","20");
hashMap.put("CiCi","19");
hashMap.put("XiXi","21");
System.out.println(hashMap);
//remove 根据键删除映射关系
hashMap.remove("Jack");
System.out.println(hashMap);
//get 根据键获取值
System.out.println(hashMap.get("Tom"));
//size 获取元素的个数
System.out.println(hashMap.size());
//isEmpty 判断个数是否为零
System.out.println(hashMap.isEmpty());
//containsKey 查找键是否存在
System.out.println(hashMap.containsKey("CiCi"));
//clear 清空
hashMap.clear();
System.out.println(hashMap);
}
}



