我有并且ArrayDeque<Integer>
我正在循环查找一个元素,一旦找到我想将它推到双端队列的底部。但它给了我java.util.ConcurrentModificationException
错误。
感谢您对演示的任何帮助。也许也使用不同的工具。
我有并且ArrayDeque<Integer>
我正在循环查找一个元素,一旦找到我想将它推到双端队列的底部。但它给了我java.util.ConcurrentModificationException
错误。
感谢您对演示的任何帮助。也许也使用不同的工具。
我没有看到您的示例,但您的问题是您使用两个不同的迭代器(它们可能是 JVM 隐含的,例如当您使用时for loop
)来读取和修改deque
。每个都Iterator
包含检查并发修改的计数器。为避免java.util.ConcurrentModificationException
您必须同时使用一个Iterator
:
变体 1:
public static void moveLast(Deque<Integer> deque, int val) {
if (deque.remove(val))
deque.add(val);
}
变体 2:
public static void moveLast(Deque<Integer> deque, int val) {
boolean exists = false;
for (int i = 0, size = deque.size(); i < size; i++) {
Integer item = deque.remove();
if (exists)
deque.add(item);
else if (val == item)
exists = true;
else
deque.add(item);
}
if (exists)
deque.add(val);
}
使用它可以帮助你
如果您使用的是 pojo havin,则实施的 Equals 足以帮助列表删除想要的对象
pojo类
class User {
private String username;
private String password;
public User(String username, String password) {
this.username = username;
this.password = password;
}
/**
* Get the value of password
*
* @return the value of password
*/
public String getPassword() {
return password;
}
/**
* Set the value of password
*
* @param password new value of password
*/
public void setPassword(String password) {
this.password = password;
}
/**
* Get the value of username
*
* @return the value of username
*/
public String getUsername() {
return username;
}
/**
* Set the value of username
*
* @param username new value of username
*/
public void setUsername(String username) {
this.username = username;
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null) {
return false;
}
if (getClass() != obj.getClass()) {
return false;
}
final User other = (User) obj;
if (!Objects.equals(this.username, other.username)) {
return false;
}
if (!Objects.equals(this.password, other.password)) {
return false;
}
return true;
}
@Override
public String toString() {
return "\nUser{" + "username=" + username + ", password=" + password + '}';
}
}
用例教程
ArrayDeque arrayDeque = new ArrayDeque();
arrayDeque.add("A");
arrayDeque.add("B");
arrayDeque.add("C");
arrayDeque.add("D");
System.out.println(arrayDeque);
arrayDeque.remove("A");
arrayDeque.add("A");
System.out.println(arrayDeque);
ArrayDeque<User> usersDeque = new ArrayDeque();
final User userTaleb = new User("Taleb", "Mohammed");
usersDeque.add(userTaleb);
usersDeque.add(new User("Mansouri", "Abdellah"));
usersDeque.add(new User("Ziane", "Nadir"));
System.out.println(usersDeque);
usersDeque.remove(userTaleb);
usersDeque.add(userTaleb);
System.out.println(usersDeque);