概述:
* HashMap是以key和value存放元素的;
* 底层是基于数组加列表实现;
* Entry数组是其主体,而列表的存在是为了解决hash冲突;
* java 8 之后又增加了红黑树解决列表太长时查询效率的问题
共用代码:
HashMap<String,String> map = new HashMap<>(5);
map.put("1", "a");
map.put("2", "b");
map.put("3", "c");
map.put("4", "d");
map.put("5", "e");
方式一:通过keySet
* 普通for循环遍历:
for(String key:map.keySet()){
System.out.println(key + ":" + map.get(key));
}
* 增强for循环遍历:
forEach(String key:map.keySet()) {
System.out.println(key + ":" + map.get(key));
}
* stream流式编程遍历:
map.keySet().stream().collect(Collectors.toList()).forEach(key -> {
System.out.println(key + ":" + map.get(key));
});
备注:获取到所有的key后仍需要调用HashMap的get方法得到value,效率较低。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210313220732415.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0dfeF9u,size_16,color_FFFFFF,t_70)
方式二:利用迭代器iterator
Iterator iterator = map.entrySet(),iterator();
while(iterator.hasNsxt()) {
Map.Entry<String,String> entry = (Map.Entry<String,String>)
iterator.next();
Sysout.out.println(entry.getKey() + ":" + entry.getValue());
}
备注:
效率高于第一种方式,该种方式一次性获得了所有的entry,不需要频繁的调用
HashMap的get方法。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210313221615645.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0dfeF9u,size_16,color_FFFFFF,t_70)
方式三:直接遍历entrySet
* 普通for循环遍历:
for(Map.Entry<String,String> entry:map.entrySet()){
System.out.println(entry.getKey() + ":" + entry.getValue());
}
* 增强for循环遍历:
forEach(Map.Entry<String,String> entry:map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
* stream流式编程增强for循环遍历:
map.entrySet().stream().collect(Collectors.toList()).forEach(entry -> {
System.out.println(entry.getKey() + ":" + entry.getValue());
})
备注:相比于方式一和方式二,方式三更推荐,高效简便。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210313221839595.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0dfeF9u,size_16,color_FFFFFF,t_70)
方式四:通过values()方法
* 普通for循环:
for(String value:map.values()){
System.out.println("value:" + value);
}
* stream流式编程增强for循环遍历:
map.entrySet().forEach(entry -> {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
});
备注:如果不需要key的话可以使用该种方式
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210313222301742.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0dfeF9u,size_16,color_FFFFFF,t_70)