Java从数组列表中删除对象

时间:2011-08-28 02:55:43

标签: java arraylist

我想从数组对象列表中删除/删除对象。如果我的班级是:

,这会有用吗?
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);
  }
}

3 个答案:

答案 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)

请检查:The Collection Interface

请注意,Iterator.remove是在迭代期间修改集合的唯一安全方法;如果在迭代过程中以任何其他方式修改基础集合,则行为未指定。