前言
本文来总结下遍历 HashMap 的 5 种方式。
实现
使用Iterator遍历HashMap的EntrySet
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* @author 郎家岭伯爵
*/
public class Test {
public static void main(String[] args){
Map< Integer, String > coursesMap = new HashMap<>();
coursesMap.put(1, "C");
coursesMap.put(2, "C++");
coursesMap.put(3, "Java");
coursesMap.put(4, "Python");
coursesMap.put(5, "JavaScript");
Iterator<Map.Entry<Integer, String>> iterator = coursesMap.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<Integer, String> entry = iterator.next();
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
}
}
Map.entrySet()
方法返回一个 Set
集合,其中包含 Map 中所有的键值对。然后使用 Set 集合的迭代器来遍历Map中的所有键值对。
使用Iterator遍历HashMap的KeySet
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* @author 郎家岭伯爵
*/
public class Test {
public static void main(String[] args){
Map< Integer, String > coursesMap = new HashMap<>();
coursesMap.put(1, "C");
coursesMap.put(2, "C++");
coursesMap.put(3, "Java");
coursesMap.put(4, "Python");
coursesMap.put(5, "JavaScript");
Iterator<Integer> iterator = coursesMap.keySet().iterator();
while (iterator.hasNext()) {
Integer key = iterator.next();
System.out.println(key);
System.out.println(coursesMap.get(key));
}
}
}
Map.keySet()
方法返回一个 Set
集合,其中包含 Map
中所有的键。然后同样使用 Set 集合的迭代器来遍历Map中的所有键。
增强for循环遍历HashMap的EntrySet
import java.util.HashMap;
import java.util.Map;
/**
* @author 郎家岭伯爵
*/
public class Test {
public static void main(String[] args){
Map< Integer, String > coursesMap = new HashMap<>();
coursesMap.put(1, "C");
coursesMap.put(2, "C++");
coursesMap.put(3, "Java");
coursesMap.put(4, "Python");
coursesMap.put(5, "JavaScript");
for (Map.Entry<Integer, String> entry: coursesMap.entrySet()) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
}
}
也可以使用增强 for 来遍历 keySet,这里不再赘述。
使用Lambda表达式遍历HashMap
import java.util.HashMap;
import java.util.Map;
/**
* @author 郎家岭伯爵
*/
public class Test {
public static void main(String[] args){
Map< Integer, String > coursesMap = new HashMap<>();
coursesMap.put(1, "C");
coursesMap.put(2, "C++");
coursesMap.put(3, "Java");
coursesMap.put(4, "Python");
coursesMap.put(5, "JavaScript");
coursesMap.forEach((key, value) -> {
System.out.println(key);
System.out.println(value);
});
}
}
Lambda
表达式是 Java 8
中引入的一种新的语法,可以用来简化代码,使代码更加紧凑和易读。Lambda
表达式由参数列表、箭头符号和方法体组成,例如 (key, value) -> { System.out.println(key); System.out.println(value); }
就是一个 Lambda 表达式。其中,(key, value)
是参数列表,箭头符号 ->
将参数列表和方法体分开,{ System.out.println(key); System.out.println(value); }
是方法体。
forEach()
方法是 Map 接口中的一个默认方法,可以用来遍历 Map 中的所有键值对。
使用StreamAPI遍历HashMap
import java.util.HashMap;
import java.util.Map;
/**
* @author 郎家岭伯爵
*/
public class Test {
public static void main(String[] args){
Map< Integer, String > coursesMap = new HashMap<>();
coursesMap.put(1, "C");
coursesMap.put(2, "C++");
coursesMap.put(3, "Java");
coursesMap.put(4, "Python");
coursesMap.put(5, "JavaScript");
// 使用StreamAPI遍历Map
coursesMap.entrySet().stream().forEach(entry -> {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
});
}
}
首先调用 entrySet()
方法获取 Map 中的键值对集合,然后调用 stream()
方法将集合转换为 Stream 对象。接着,调用 forEach()
方法对 Stream 中的每个元素执行指定的操作,这里使用 Lambda
表达式输出每个键值对的键和值。
除了 forEach()
方法外,Stream API
还提供了许多其他的操作,例如 filter()
、map()
、reduce()
等,可以对 Map 中的键值对进行过滤、映射、聚合等操作。
总结
本文总结了 5 种遍历 HashMap 的方式。