在工作中,我们都知道,如果循环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]