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()最慢

浙公网安备 33010602011771号