List移除元素方法对比

代码如下:

 1  @Test
 2     public void test_Remove() {
 3         List<Map<String, Object>> testList1 = new ArrayList<>();
 4         Map<String, Object> map;
 5         for (int i = 0; i < 10000000; i++) {
 6 //        for (int i = 0; i < 10; i++) {
 7             map = new HashMap<String, Object>();
 8             map.put("name", "name" + i);
 9             map.put("number", "number" + i);
10             testList1.add(map);
11         }
12 
13         List<Map<String, Object>> testList2 = new ArrayList<>();
14         testList2.addAll(testList1);
15 
16         List<Map<String, Object>> testList3 = new ArrayList<>();
17         testList3.addAll(testList1);
18 
19         System.out.println("testList1移除前长度: " + testList1.size());
20         // 第一种删除
21         long startTime1 = System.currentTimeMillis();
22         for (int i = 0; i < testList1.size(); i++) {
23 //            System.out.println("size: " + size);
24             Map<String, Object> tempMap = testList1.get(i);
25             if ("name5".equals(tempMap.get("name")) || "name8".equals(tempMap.get("name")) || "name9".equals(tempMap.get("name")) || "name22".equals(tempMap.get("name"))
26                     || "name1000".equals(tempMap.get("name"))) {
27                 testList1.remove(tempMap);
28                 i--;
29 //                i--;
30             }
31 //            System.out.println("i: " + i);
32         }
33         System.out.println("testList1移后前长度: " + testList1.size());
34         long endTime1 = System.currentTimeMillis();
35         long time1 = endTime1 - startTime1;
36 
37         System.out.println("==========================================");
38         // 第二种删除
39         List<Map<String, Object>> deleteList = new ArrayList<>();
40         System.out.println("testList2移除前长度: " + testList2.size());
41         long startTime2 = System.currentTimeMillis();
42         for (int i = 0, size = testList2.size(); i < size; i++) {
43 //            System.out.println("size: " + size);
44             Map<String, Object> tempMap = testList2.get(i);
45             if ("name5".equals(tempMap.get("name")) || "name8".equals(tempMap.get("name")) || "name9".equals(tempMap.get("name")) || "name22".equals(tempMap.get("name"))
46                     || "name1000".equals(tempMap.get("name"))) {
47                 deleteList.add(tempMap);
48             }
49 //            System.out.println("size: " + size);
50         }
51         testList2.removeAll(deleteList);
52         System.out.println("testList2移除后长度: " + testList2.size());
53         long endTime2 = System.currentTimeMillis();
54         long time2 = endTime2 - startTime2;
55 
56         // 第三种方法
57         List<Map<String, Object>> copyList = new ArrayList<>();
58         long startTime3 = System.currentTimeMillis();
59         for (int i = 0, size = testList3.size(); i < size; i++) {
60             Map<String, Object> tempMap = testList3.get(i);
61             if ("name5".equals(tempMap.get("name")) || "name8".equals(tempMap.get("name")) || "name9".equals(tempMap.get("name")) || "name22".equals(tempMap.get("name"))
62                     || "name1000".equals(tempMap.get("name"))) {
63                 continue;
64             }
65             copyList.add(tempMap);
66         }
67         System.out.println("copyList长度: " + copyList.size());
68         long endTime3 = System.currentTimeMillis();
69         long time3 = endTime3 - startTime3;
70 
71 
72         System.out.println("testList1花费时间: " + time1);
73         System.out.println("testList2花费时间: " + time2);
74         System.out.println("copyList花费时间: " + time3);
75     }

 

运行结果: 

testList1移除前长度: 10000000
testList1移后前长度: 9999995
==========================================
testList2移除前长度: 10000000
testList2移除后长度: 9999995
copyList长度: 9999995
testList1花费时间: 506
testList2花费时间: 6995
copyList花费时间: 538

 

结论: 直接list.remove() 和新建一个集合保存需要的元素, 速度差不多, list.removeAll()最慢

posted @ 2021-09-10 17:59  让我把这一行代码写完  阅读(167)  评论(0)    收藏  举报