我想从数组对象列表中删除/删除对象。如果我的班级是:
,这会有用吗?class bookings {
public String getuser () {
return user;
}
public Date getbooking() {
return bookingDate;
}
private String user;
private Date bookingDate;
}
我有一个类似的arraylist:
ArrayList <bookings> book;
public void foo (String user, Date date) {
for (bookings b : book) {
if (user.equals(b.getuser()) && date.equals(g.getbooking()) book.remove(b);
}
}
答案 0 :(得分:2)
首先,你不能使用foreach循环for (bookings b : book)
,因为它不允许你修改集合(它会抛出异常)。
此代码应该有效:
public void foo (String user, Date date) {
for (Iterator<bookings> i = book.iterator(); i.hasNext();) {
bookings b = i.next(); // Oops - forgot this line!
if (user.equals(b.getuser()) && date.equals(b.getbooking())
i.remove(); // Corrected this too!
}
}
使用标准命名约定和大小写来命名是不会有害的:
class Booking {
String getUser() ...
Date getDate() ...
}
ArrayList<Booking> bookings;
答案 1 :(得分:1)
FHR, 你的方式会有问题。
java.util.ConcurrentModificationException
表示您在循环和删除中同时修改集合。
如果您想知道错误发生的根本原因。
你最好看一下这篇文章
Why doesn’t java.util.Collection define next(), hasNext() directly?
所以请改用Iterator。
Iterator it = list.iterator();
while(it.hasNext()){
Object o = it.next();
//check your object here such as equals,
//the safe way is to use Iterator here.
it.remove();
}
您可以使用Iterator中的预订类型对其进行重构,例如Iterator<bookings>
答案 2 :(得分:0)
请注意,Iterator.remove是在迭代期间修改集合的唯一安全方法;如果在迭代过程中以任何其他方式修改基础集合,则行为未指定。