HashMap的四种遍历方式
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
/**
* @author Legend E-mail:
* @version 时间:2020年6月3日 下午6:41:01
* 类说明:
*/
public class MapIterator {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<>();
//向map中放值,并验证key,value规律
map.put("aa", 12);
map.put("bb", 34);
map.put("cc", null);
map.put("ee", null);
map.put(null, 56);
/**
* 方式一:常用,先获取key,再通过key值获得value
*/
for(String key: map.keySet()) {
Integer value = map.get(key);
System.out.println("key:"+key+"--->"+"value:"+value);
}
System.out.println("--------------");
//map中已经存在为“bb”和“null”的key,再次put不同的value,检验结果
Integer bbSecond = map.put("bb", 999);
Integer nullSecond = map.put(null, 888);
System.out.println("map中已经存在的key('bb'),再次put不同的value后,返回值:"+bbSecond);
System.out.println("map中已经存在的key('null'),再次put不同的value后,返回值:"+nullSecond);
/**
* 方式二:大容量时推荐使用,效率较高
*/
for(Map.Entry<String, Integer> entry: map.entrySet()) {
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println("key:"+key+"--->"+"value:"+value);
}
System.out.println("================");
/**
* 方式三:通过Iterator迭代器遍历循,Map.entrySet().iterator();效率不如方式二
*/
Iterator<Entry<String, Integer>> it = map.entrySet().iterator();
while(it.hasNext()) {
Entry<String, Integer> next = it.next();
System.out.println("key:"+next.getKey()+"--->"+"value:"+next.getValue());
}
System.out.println("+++++++++++++++++");
/**
* 方式四:"通过Map.values()遍历所有的value,但不能遍历key");
*/
for (Integer value : map.values()) {
System.out.println("value:" + value);
}
}
}
运行结果:
key:aa--->value:12
key:bb--->value:34
key:cc--->value:null
key:ee--->value:null
key:null--->value:56
执行以下代码后
Integer bbSecond = map.put("bb", 999);
Integer nullSecond = map.put(null, 888);
System.out.println("map中已经存在的key('bb'),再次put不同的value后,返回值:"+bbSecond);
System.out.println("map中已经存在的key('null'),再次put不同的value后,返回值:"+nullSecond);
============================================
map中已经存在的key('bb'),再次put不同的value后,返回值:34
map中已经存在的key('null'),再次put不同的value后,返回值:56
key:aa--->value:12
key:bb--->value:999
key:cc--->value:null
key:ee--->value:null
key:null--->value:888
总结可以得出:
a、若插入的key值map中已经存在,新value会覆盖原有的value,并将原value返回(若key不存在,返回值为null,可自行验证)。
b、value可以为null,并且可以有多个是null;
c、key值也可以为null,但只能有一个是null。
若想知其所以然,还是看源码!!!
温馨提示:
以上为本人学习记录分享内容,希望对大家有所帮助。不喜请小喷……