本篇主要是介绍Map接口的特点以及底层机制 有一些关于我对其的一些理解~ 望批评指正
若能对您有所帮助,希望您能推荐给其他人~
1Map与Collection并列存在。用于保存具有映射关系的数据 Key , value
2.Map中的key和value可以是任何引用类型的数据,会封装到HashsetMap$Node中
3.Map中的key不允许重复,原因和Hashset一样 //
4.Map中的value可以重复
5.key和value都可以为null , value也可以为null ,但要注意key为null,只能有一个,value为null可以有多个(还是因为key的值不能重复)
6.常用String类做key的值
7.通过key值找到value
在这里的我的理解是:
每当put进去一个数据就相当于加了一个节点,而这个节点又可以分为两大块(索引值,值)
这两个节点的类型是不一样的 key是Set类型 value是Collection类型
此图非常重要,有助于我们进一步理解Map遍历机制,当你遍历过程中出错时,多想想多态,
多想想这张图
到这 大家可能就明白 我们可以利用多态原理 来实现以下遍历
map的六大遍历方式
直接上代码 学过多态的小伙伴应该可以立刻看懂
package com.map;
import java.util.*;
/**
* written by
* time:2022/11/17 20:03
*/
public class map_01 {
public static void main(String[] args) {
Map hashMap = new HashMap();
hashMap.put("123","jack");
hashMap.put("456","smith");
hashMap.put("789","小明");
Set set = hashMap.keySet();
System.out.println(set);//01
for (Object o : set) {
System.out.println(hashMap.get(o));
}
Iterator iterator = hashMap.keySet().iterator();//02
while (iterator.hasNext()) {
Object next = iterator.next();
}
Collection collection = hashMap.values();//03
for (Object o :collection) {
System.out.println(o);
}
//04 迭代器 与上面基本一致
Set set1 = hashMap.entrySet();
for (Object o :set1) {
System.out.println(o);
}
}
}
这四种是比较简单的
下面两种可能需要静下心认真去读一读
package com.map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/**
* written by 刘瑞臻
* time:2022/11/17 21:15
*/
public class map_test {
public static void main(String[] args) {
Map hashMap = new HashMap();
hashMap.put("123","jack");
hashMap.put("456","smith");
hashMap.put("789","小明");
Set set1 = hashMap.entrySet();
for (Object o :set1) {
Map.Entry m = (Map.Entry) o;
System.out.println(m.getKey()+" "+m.getValue());
}
Iterator iterator = hashMap.entrySet().iterator();
while (iterator.hasNext()) {
Object next = iterator.next();
Map.Entry z = (Map.Entry) next;
System.out.println(z.getKey()+" "+z.getValue());
}
}
}
总结:
装着key - value的节点真正的类型是Entry 我们好好利用这一点 再结合Java多态性质,
便可以通过节点中的key or value任意一个 对其全部进行遍历