Map接口特点
-
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);}
}
/*
运行结果:
20
{=25, Tom=18, XiXi=, java.lang.Object@1b6d3586=大山, Jack=20, CiCi=}*/
-
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<Entry> 即: transient Set<Map.Entry<K,V>> entrySet;//3.entrySet 中,定义的类型是Map.Entry,但是实际上存放的还是 HashMap$Node// 这时因为static class Node<K,V> implements Map.Entry<K,V>//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());}//获取KeySet set1 = map.keySet();System.out.println(set1);//获取ValueCollection values = map.values();System.out.println(values);}
}
class Car{
}
class Person{
}
/*
运行结果:
class java.util.HashMap$EntrySet
class java.util.HashMap$Node
class java.util.HashMap$Node
Tom - 18
class java.util.HashMap$Node
class java.util.HashMap$Node
com.yu.Map.Car@1b6d3586 - com.yu.Map.Person@4554617c
class java.util.HashMap$Node
class java.util.HashMap$Node
Jack - 18
[Tom, com.yu.Map.Car@1b6d3586, Jack]
[18, com.yu.Map.Person@4554617c, 18]*/
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);}
}
/*
运行结果:
{Tom=20, XiXi=21, Jack=18, CiCi=19}
{Tom=20, XiXi=21, CiCi=19}
20
3
false
true
{}*/