遍历List和Map的几种方法

总结一下list和map遍历的几种方式 

一、遍历list的几种方法实现

 1 import java.util.ArrayList;
 2 import java.util.Iterator;
 3 import java.util.List;
 4 import java.util.function.Consumer;
 5 
 6 public class ForTest {
 7     public static void main(String[] args) {
 8         List<String> list = new ArrayList<String>() {{
 9             add("abc");
10             add("def");
11             add("igh");
12         }};
13 
14 
15         System.out.println("----------方式1:普通for循环-----------");
16         for (int i = 0; i < list.size(); i++) {
17             System.out.println(list.get(i));
18         }
19 
20         System.out.println("----------方式2.1:使用迭代器-----------");
21         for (Iterator<String> iterator = list.iterator(); iterator.hasNext(); ) {
22             System.out.println(iterator.next());
23         }
24 
25         System.out.println("----------方式2.2:使用迭代器-----------");
26         Iterator<String> iterator = list.iterator();
27         while(iterator.hasNext()){
28             System.out.println(iterator.next());
29         }
30 
31         System.out.println("----------方式3:For-Each 循环-----------");
32         for (String str : list) {
33             System.out.println(str);
34         }
35 
36         System.out.println("----------方式4.1:Lambda表达式 (java8之后)-----------");
37         list.forEach(str->System.out.println(str));
38 
39 
40         System.out.println("----------方式4.2:关于Lambda表达式的自定义 (java8之后)-----------");
41         //创建自定义消费行为动作实例
42         MyConsumer myConsumer = new MyConsumer();
43         list.forEach(myConsumer);
44     }
45 
46 
47     static class MyConsumer implements Consumer<Object> {
48 
49         @Override
50         public void accept(Object t) {
51             System.out.println("打印输出(动作执行的参数):" + t);
52         }
53     }
54 }

二、Java8中的foreach方法

1、forEach源码

forEach方法是JAVA8中在集合父接口java.lang.Iterable中新增的一个default实现方法:

 

  • forEach方法接受一个在JAVA8中新增的java.util.function.Consumer的消费行为 或者称之为动作 (Consumer action )类型;
  • 然后将集合中的每个元素作为消费行为的accept方法的参数执行;
  • 直到每个元素都处理完毕或者抛出异常即终止行为;
  • 除非指定了消费行为action 的实现,否则默认情况下是按迭代里面的元素顺序依次处理。

2、自定义消费行为

1  static class MyConsumer implements Consumer<Object> {
2 
3         @Override
4         public void accept(Object t) {
5             System.out.println("打印输出(动作执行的参数):" + t);
6         }
7     }
  • 首先,需要实现java.util.function.Consumer接口;
  • 再次,实现其accept方法

3、相关API

  • java.lang.Iterable#forEach
  • java.util.function.Consumer#accept

三、遍历map几种方法实现(重点:第三种方法)

Map提供了一些常用方法,如keySet()、entrySet()等方法。

keySet()方法返回值是Map中key值的Set集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。

关于Map.Entry:

Map是java中的接口,Map.Entry是Map的一个内部接口。

此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey()/getValue()方法。

 

 代码实现:

 1 public class MapTest {
 2     public static void main(String[] args) {
 3         Map<String, Long> longestResult = new HashMap<>();
 4         longestResult.put("id", 0L);
 5         System.out.println(longestResult.get("id"));
 6 
 7         //根据key获取value时,如果map里没有相应的key,返回null
 8         System.out.println(longestResult.get("name"));
 9 
10         printTest();
11     }
12 
13     private static void printTest() {
14         Map<String, String> map = new HashMap<String, String>();
15         map.put("key1", "value1");
16         map.put("key2", "value2");
17         map.put("key3", "value3");
18 
19         //第一种:普遍使用,二次取值
20         System.out.println("通过Map.keySet遍历key和value:");
21         for (String key : map.keySet()) {
22             System.out.println("key= "+ key + " and value= " + map.get(key));
23         }
24 
25         //第二种
26         System.out.println("通过Map.entrySet使用iterator遍历key和value:");
27         Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();
28         while (it.hasNext()) {
29             Map.Entry<String, String> entry = it.next();
30             System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
31         }
32 
33         //第三种:推荐,尤其是容量大时
34         System.out.println("通过Map.entrySet遍历key和value");
35         for (Map.Entry<String, String> entry : map.entrySet()) {
36             System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());
37         }
38 
39         //第四种
40         System.out.println("通过Map.values()遍历所有的value,但不能遍历key");
41         for (String value : map.values()) {
42             System.out.println("value= " + value);
43         }
44     }
45 
46 }

四、参考

https://www.jianshu.com/p/6babf082f4a3

https://blog.csdn.net/yaomingyang/article/details/78748130

posted @ 2022-02-05 12:00  zeroingToOne  阅读(673)  评论(0编辑  收藏  举报