java集合类ArrayList操作之删除remove某些元素的案例分析

原文:点击

在java开发中,会经常出现需要删除java ArrayList的某些元素的场景,比如从在线用户列表的ArrayList中删除离线用户的ArrayList,但有的人会出现循环在线用户ArrayList列表然后删除离线用户ArrayList的情况,看着代码确实没什么问题,但其实犯了初学者最容易犯的一个错误,同时循环ArrayList和删除ArrayList的元素。

如下的java代码可以演示发生的一切:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package com.arraylist;
import java.util.ArrayList;
/**
* @author www.zuidaima.com
*
*/
public class RemoveItemFromArrayList {
public static void printArrayList(ArrayList<String> list) {
for (String item : list) {
System.out.print(item + " ");
}
System.out.println("");
}
/**
* 循环ArrayList1同时删除item是错误的,会导致指针错乱造成删除元素错误
*
* @param list
* @param list2
*/
public static void removeArrayList1(ArrayList<String> list,
ArrayList<String> list2) {
for (String item : list) {
if (list2.contains(item)) {
list.remove(item);
}
}
}
/**
* 循环ArrayList2同时删除item
*
* @param list
* @param list2
*/
public static void removeArrayList2(ArrayList<String> list,
ArrayList<String> list2) {
for (String item : list2) {
list.remove(item);
}
}
/**
* 调用ArrayList.removeAll方法
*
* @param list
* @param list2
*/
public static void removeArrayList3(ArrayList<String> list,
ArrayList<String> list2) {
list.removeAll(list2);
}
public static ArrayList<String> initOnlineUserArrayList() {
ArrayList<String> onlineUserList = new ArrayList<String>();
onlineUserList.add("zuidaima");
onlineUserList.add("最代码");
onlineUserList.add("javaniu");
return onlineUserList;
}
public static ArrayList<String> initOfflineUserArrayList() {
ArrayList<String> offlineUserList = new ArrayList<String>();
offlineUserList.add("最代码");
offlineUserList.add("javaniu");
return offlineUserList;
}
public static void main(String[] args) {
ArrayList<String> onlineUserList = initOnlineUserArrayList();
ArrayList<String> offlineUserList = initOfflineUserArrayList();
System.out.println("removeArrayList1前:");
printArrayList(onlineUserList);
removeArrayList1(onlineUserList, offlineUserList);
System.out.println("removeArrayList1后:");
printArrayList(onlineUserList);
System.out.println("------------------------");
onlineUserList = initOnlineUserArrayList();
System.out.println("removeArrayList2前:");
printArrayList(onlineUserList);
removeArrayList2(onlineUserList, offlineUserList);
System.out.println("removeArrayList2后:");
printArrayList(onlineUserList);
System.out.println("------------------------");
onlineUserList = initOnlineUserArrayList();
System.out.println("removeArrayList3前:");
printArrayList(onlineUserList);
removeArrayList3(onlineUserList, offlineUserList);
System.out.println("removeArrayList3后:");
printArrayList(onlineUserList);
}
}

其中removeArrayList1方法的执行结果是错误的:

虽然是java基础,但是确实是很多初学者容易犯的错误,给大家分享出来,希望能给牛牛们有所帮助。
另外也希望大家都能总结分享平时遇到的有价值的代码,一起学习进步。

本文来自互联网,不保证正确!若侵权请联系我们删除!

Jerky Lu wechat
欢迎加入微信公众号