Tengo una lista enlazada llamada seatList compuesta por objetos Seat configurados así...
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 + ")"; } }Cuando trato de eliminar los asientos con las mismas propiedades creando un nuevo objeto de asiento y almacenándolo en una lista vinculada separada llamada colecciones, no se eliminan de la lista vinculada.
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)); }Razón por la que es diferente: la pregunta vinculada habla de alterar la lista que está iterando según lo establecido por csm_dev
Para eliminar un objeto de la lista, debe usar Iterator y llamar a remove() en el iterador, un ejemplo:
Iterator<Seat> collection = seatList.iterator(); while (collection.hasNext()) { Seat element = collection.next(); //some condition on your object "element" collection.remove(); }y no se olvide de definir la lógica de hashCode/equals methodes para comparar sus objetos Seat
Tienes que usar Iterator para esto :
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(); } }Tienes que agregar setters y getters en tu clase estado.
LinkedList y otras implementaciones de listas usan el método equals() para verificar si el objeto está presente en la lista. Dado que no tiene implementado el método equals (), Java utilizará la implementación proporcionada por la clase Object, que es muy cruda y no funciona para usted.
Debe implementar el método equals() y darle a jvm una forma de ver si 2 objetos del asiento son iguales.