遍历HashMap
参考文章:
https://mp.weixin.qq.com/s?__biz=MzU4ODI1MjA3NQ==&mid=2247493142&idx=2&sn=c1913fc71d79d0f29f7902adf5eb23cb&chksm=fddd30d2caaab9c4761f7323a192cceb2a7b0ecf8cd9b281b2acb6dd581958f5dc2d0f8bd283&mpshare=1&scene=23&srcid=1115iNn2cQ3IyPbHyLPxBoUx&sharer_sharetime=1605420835944&sharer_shareid=9d1e76e919cc0b2f3ca23ed1f5ef67a8#rd
直接上测试代码
package com.shaoming.hashmap;
import org.junit.Test;
import sun.awt.SunHints;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* @Auther: shaoming
* @Date: 2020/11/15 14:18
* @Description: HashMap 遍历从大的方向来说,可分为以下 4 类:
* <p>
* 迭代器(Iterator)方式遍历;
* For Each 方式遍历;
* Lambda 表达式遍历(JDK 1.8+);
* Streams API 遍历(JDK 1.8+)。
* 但每种类型下又有不同的实现方式,因此具体的遍历方式又可以分为以下 7 种:
* <p>
* 使用迭代器(Iterator)EntrySet 的方式进行遍历;
* 使用迭代器(Iterator)KeySet 的方式进行遍历;
* 使用 For Each EntrySet 的方式进行遍历;
* 使用 For Each KeySet 的方式进行遍历;
* 使用 Lambda 表达式的方式进行遍历;
* 使用 Streams API 单线程的方式进行遍历;
* 使用 Streams API 多线程的方式进行遍历。
* 接下来我们来看每种遍历方式的具体实现代码。
*/
public class ForhashMap {
private static final HashMap<Integer, String> MAP = new HashMap<>();
static {
MAP.put(1, "Java");
MAP.put(2, "JDK");
MAP.put(3, "Spring Framework");
MAP.put(4, "MyBatis framework");
MAP.put(5, "Java中文社群");
}
//1.迭代器 EntrySet
@Test
public void test1() {
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "java");
map.put(2, "JDK");
map.put(3, "Spring Framework");
map.put(4, "MyBatis framework");
map.put(5, "Java中文社群");
//遍历
Iterator<Map.Entry<Integer, String>> iterator = map.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<Integer, String> entry = iterator.next();
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
}
//2.迭代器遍历keyset
@Test
public void test2() {
Iterator<Integer> iterator = MAP.keySet().iterator();
while (iterator.hasNext()) {
Integer key = iterator.next();
System.out.println(key);
System.out.println(MAP.get(key));
}
}
//3.ForEach EntrySet
@Test
public void test3() {
for (Map.Entry<Integer, String> entry : MAP.entrySet()) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
}
//4.ForEach keyset
@Test
public void test4() {
for (Integer key : MAP.keySet()) {
System.out.println(key);
System.out.println(MAP.get(key));
}
}
//5.lambda
@Test
public void test5() {
MAP.forEach((key, value) -> {
System.out.println(key);
System.out.println(value);
});
}
//6.Streams API 单线程
@Test
public void test6() {
MAP.entrySet().stream().forEach((entry) -> {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
});
}
//7.Streams API 多线程
@Test
public void test7() {
MAP.entrySet().parallelStream().forEach((entry)->{
System.out.println(entry.getKey());
System.out.println(entry.getValue());
});
}
}