我有一个名为seatList的链表,由Seat对象组成,如此设置......
public class Seat {
int row, col;
char type;
Seat(int row, int col, char type){
this.row = row;
this.col = col;
this.type = type;
}
String printSeat(){
return "(" + row + ", " + col + ", " + type + ")";
}
}
当我尝试通过创建一个新的座位对象并将其存储在一个名为集合的单独链接列表中来删除具有相同属性的席位时,它们不会从链接列表中删除。
LinkedList<Seat> collection = new LinkedList();
for (int q : indexToRemove){
collection.add(new Seat(seatList.get(q).row, seatList.get(q).col, seatList.get(q).type));
}
for (Seat s : collection){
if (seatList.contains(s)){
println("true");
seatList.remove(s);
}
}
if (orders.get(indexes.get(index)).seatList.isEmpty()){
orders.remove((int)indexes.get(index));
}
原因不同:链接问题谈到改变你正在迭代的列表,如csm_dev所述
答案 0 :(得分:2)
要从列表中删除对象,必须使用Iterator并在迭代器上调用remove()示例:
Iterator<Seat> collection = seatList.iterator();
while (collection.hasNext())
{
Seat element = collection.next();
//some condition on your object "element"
collection.remove();
}
并且不要定义hashCode / equals方法逻辑来比较你的Seat对象
答案 1 :(得分:1)
您必须使用Iterator :
Scanner scr= new Scanner(System.in);
System.out.print("Enter Seat Row number to delete: ");
int row = scr.nextInt();
for (Iterator<Seat> iter = list.iterator(); iter.hasNext();) {
Seat data = iter.next();
if (data.getRow() == row) {
iter.remove();
}
}
你必须在上课时添加setter和getter。
答案 2 :(得分:0)
LinkedList&amp;其他列表实现使用equals()方法来检查对象是否存在于列表中。由于你没有实现equals()方法,java将使用Object类提供的实现,这是非常粗糙的&amp;不适合你。
你需要实现equals()方法&amp;给jvm一个方法来看看两个座位对象是否相同。
答案 3 :(得分:0)
如果您确实不需要创建要添加到collection
列表的新对象,则可以在代码段中添加来自seatList
和第二for
的对象,从中删除对象列表。
for (int q : indexToRemove){
collection.add(seatList.get(q));
}
如果check
天气列表包含对象,则使用对象的equals()
方法,您应该使用hashCode()
方法相应地实现它,以获得所需的结果。