在工作中,我们都知道,如果循环List的循环体中有remove操作,将抛出java.util.ConcurrentModificationException异常。
面对这种操作,有如下两种方法来处理:
1.通过新建一个结果List<UserDTO>保存处理后的数据
2.用两个变量在一个循环中处理
实例代码:
ListDemo.java
package com.bijian.study;
import java.util.ArrayList;
import java.util.List;
/**
* 对List的刷选实例
*/
public class ListDemo {
public static void main(String[] args) {
List<UserDTO> userList = new ArrayList<UserDTO>();
UserDTO userDTO1 = new UserDTO("zhangshan", "123");
UserDTO userDTO2 = new UserDTO("lisi", "123456");
UserDTO userDTO3 = new UserDTO("wangwu", "1236");
UserDTO userDTO4 = new UserDTO("zhaoliu", "123");
UserDTO userDTO5 = new UserDTO("diandian", "123");
userList.add(userDTO1);
userList.add(userDTO2);
userList.add(userDTO3);
userList.add(userDTO4);
userList.add(userDTO5);
ListDemo listDemo = new ListDemo();
List<UserDTO> resultList = listDemo.listProcess(userList);
for(UserDTO userDTO : resultList) {
System.out.println(userDTO);
}
}
/**
* Exception in thread "main" java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(Unknown Source)
at java.util.AbstractList$Itr.next(Unknown Source)
at com.bijian.study.ListDemo.listProcess(ListDemo.java:32)
at com.bijian.study.ListDemo.main(ListDemo.java:25)
* @param userList
* @return
*/
// public List<UserDTO> listProcess(List<UserDTO> userList) {
// for(UserDTO userDTO : userList) {
// if(userDTO.getPassword().equals("123")) {
// userList.remove(userDTO);
// }
// }
// return userList;
// }
/**
* 通过新建一个结果List<UserDTO>保存处理后的数据
* @param userList
* @return
*/
// public List<UserDTO> listProcess(List<UserDTO> userList) {
//
// List<UserDTO> resultList = new ArrayList<UserDTO>();
// for(UserDTO userDTO : userList) {
// if(!userDTO.getPassword().equals("123")) {
// resultList.add(userDTO);
// }
// }
// return resultList;
// }
/**
* 用两个变量在一个循环中处理
* i:用来控制循环
* j:用来从List中获取元素
* @param userList
* @return
*/
public List<UserDTO> listProcess(List<UserDTO> userList) {
for (int i = 0, length = userList.size(), j = 0; i < length; i++) {
UserDTO userDTO = userList.get(j);
String password = userDTO.getPassword();
if ("123".equals(password)) {
userList.remove(j);
} else {
j++;
}
}
return userList;
}
}
UserDTO.java
package com.bijian.study;
public class UserDTO {
private String name;
private String password;
public UserDTO(String name, String password) {
this.name = name;
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "UserDTO [name=" + name + ", password=" + password + "]";
}
}
运行结果:
UserDTO [name=lisi, password=123456] UserDTO [name=wangwu, password=1236]