遍历方式
1.迭代器EntrySet方式遍历
public static void main(String[] args) {
// 创建并赋值 HashMap
Map<Integer, String> map = new HashMap();
map.put(1, "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());//1
System.out.println(entry.getValue());//Java
}
}
2.迭代器KeySet遍历
public static void main(String[] args) {
// 创建并赋值 HashMap
Map<Integer, String> map = new HashMap();
map.put(1, "Java");
//遍历
Iterator<Integer> iterator = map.keySet().iterator();
while(iterator.hasNext()){
Integer Key = iterator.next();
System.out.println(Key);//1
System.out.println(map.get(Key));//Java
}
}
3.ForEach EntrySet
public static void main(String[] args) {
// 创建并赋值 HashMap
Map<Integer, String> map = new HashMap();
map.put(1, "Java");
//遍历
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println(entry.getKey());//1
System.out.println(entry.getValue());//Java
}
}
4. ForEach KeySet
public static void main(String[] args) {
// 创建并赋值 HashMap
Map<Integer, String> map = new HashMap();
map.put(1, "Java");
//遍历
for (Integer key : map.keySet()) {
System.out.println(key);//1
System.out.println(map.get(key));//Java
}
}
5.Lambda表达式
public static void main(String[] args) {
// 创建并赋值 HashMap
Map<Integer, String> map = new HashMap();
map.put(1, "Java");
//遍历
map.forEach((key,value)->{
System.out.println(key);//1
System.out.println(value);//Java
});
}
6.Streams API 单线程
public static void main(String[] args) {
// 创建并赋值 HashMap
Map<Integer, String> map = new HashMap();
map.put(1, "Java");
//遍历
map.entrySet().stream().forEach((entry)->{
System.out.println(entry.getKey());//1
System.out.println(entry.getValue());//Java
});
}
7.Streams API 多线程
public static void main(String[] args) {
// 创建并赋值 HashMap
Map<Integer, String> map = new HashMap();
map.put(1, "Java");
//遍历
map.entrySet().parallelStream().forEach((entry)->{
System.out.println(entry.getKey());//1
System.out.println(entry.getValue());//Java
});
}
性能分析
在使用ForEach和迭代器遍历性能是差不多的,他们最终生成的字节码基本上都是一样的
性能排行,EntrySet>Streams>KeySet
KeySet因为在循环中使用了*get()方法,而get()*相当于又遍历了一遍Map集合查询Key,EntrySet只遍历了一遍Map集合,所以EntrySet的性能比KeySet性能高出一倍