Ho un ArrayList
che contiene alcuni oggetti, ad esempio User
e ogni oggetto ha una proprietà name
e password
. Come posso cancellare solo l'oggetto User
che ha un "nome" specifico da questo ArrayList
?Come rimuovere un oggetto da un ArrayList in Java?
risposta
Basta cercare nell'elenco Array degli oggetti che si ottengono dall'utente e verificare un nome uguale al nome che si desidera rimuovere. Quindi rimuovi l'oggetto dall'elenco.
Si spera che ci siano ottimizzazioni che possono essere fatte, altrimenti l'OP è bloccato con un'implementazione O (n). –
@ X-Zero In quale scenario in cui non si conosce la posizione di un oggetto in una lista, si può avere di meglio di 'O (n)'? –
@ X-Zero: se tutti gli OP hanno una lista di array, allora 'O (n)' è il meglio che può sperare (la rimozione degli elementi da sola è 'O (n)'). – NPE
Si potrebbe:
- loop all'interno di una lista con un iteratore
- verifica se ogni elemento nella lista è il diritto utente (controllando il nome)
- se lo è, utilizzare il metodo remove dell'iteratore.
Iterator<User> it = list.iterator();
while (it.hasNext()) {
User user = it.next();
if (user.getName().equals("John Doe")) {
it.remove();
}
}
Non sembra che l'OP abbia funzionato per questa domanda, non dovresti dare loro il codice gratuitamente. –
Cosa rappresenta la lista ????? –
Sì Sì Ho capito ... grazie –
Il codice potrebbe essere simile a questo:
List<User> users = new ArrayList<User>();
public void removeUser(String name){
for(User user:users){
if(user.name.equals(name)){
users.remove(user);
}
}
}
È necessario utilizzare un iteratore per rimuovere all'interno di un ciclo o si otterrà probabilmente un ConcurrentModificationException. – assylias
@assylias Il ciclo di base per esteso è stato esteso in Java 5 per rendere più conveniente l'iterazione su array e altre raccolte. E l'implicità del ciclo per ogni usa l'iteratore –
Prova ad eseguire questo codice (mi dispiace per la formattazione): 'Lista
Un altro pensiero: Se la classe utente può essere definita in modo univoco dal nome utente, e se si ignora è uguale con qualcosa di simile:
public booleano uguale (oggetto arg0) {
return this.name.equals(((user) arg0).name);
}
È possibile rimuovere l'utente senza scorrere l'elenco. Si può solo fare:
list.remove (nuovo utente ("John Doe"))
Siete probabilmente affrontati alla ConcurrentModificationException
durante il tentativo di rimuovere l'oggetto dal List
. Una spiegazione per questa eccezione è che l'iteratore di ArrayList
è un iteratore fail-fast. Ad esempio, genera un'eccezione (errore) quando rileva che la sua raccolta nel runtime è stata modificata. La soluzione a questo problema è utilizzare Iterator
.
Ecco un semplice esempio che dimostrano come si potrebbe scorrere l'List
e rimuovere l'elemento quando determinata condizione:
List<User> list = new ...
for (Iterator<User> it = list.iterator(); it.hasNext();) {
User user = it.next();
if (user.getUserEmail().equals(currentUser.getUserEmail())) {
it.remove();
}
}
si potrebbe usare qualcosa di simile:
arrayList.removeIf(s-> s.getName().contains("yourName"));
Che cos'è 's'? Per favore, rendi le tue risposte un po 'più specifiche. –
s è predicato qui e funziona solo in JDK 1.8 dove è supportata l'espressione Lambda. Rimuove tutti gli elementi di questa raccolta che soddisfano il predicato specificato. – jprism
Consigliato il modo per risolvere questo problema è:
ArrayList<User> list = new ArrayList<User>();
list.add(new User("user1","password1"));
list.add(new User("user2","password2"));
list.add(new User("user3","password3"));
list.add(new User("user4","password4"));
Iterator<String> iter = list.iterator();
while (iter.hasNext())
{
User user = iter.next();
if(user.name.equals("user1"))
{
//Use iterator to remove this User object.
iter.remove();
}
}
L'utilizzo di Iterator per rimuovere un oggetto è più efficiente della rimozione semplicemente digitando ArrayList(Object)
perché è più veloce e il 20% in più di risparmio di tempo e una pratica Java standard per le raccolte Java.
ArrayList<User> userList=new ArrayList<>();
//load data
public void removeUser(String userName){
for (User user: userList){
if(user.getName()equals(userName)){
userList.remove(user);
}
}
}
Impossibile rimuovere durante l'iterazione per ogni http://stackoverflow.com/questions/223918/iterating-through-a-collection-avoiding-concurrentmodificatione-ception-when-re – Gangaraju
- 1. Come rimuovere elementi sequenziali da un ArrayList Java?
- 2. Come rimuovere oggetti specifici da ArrayList in Java?
- 3. Rimozione dell'ultimo oggetto di ArrayList in Java
- 4. Java - rimuovere ultimo elemento noto da ArrayList
- 5. Rimuovere un membro da un oggetto PowerShell?
- 6. Sottrarre un arrayList da un altro arrayList
- 7. Ottieni un oggetto ArrayList specifico
- 8. comportamento indesiderato di ArrayList rimuovere() in Java
- 9. LinkedList: rimuovere un oggetto
- 10. Come creare un ArrayList 2D in java?
- 11. Oggetto Java in Arraylist o Elenco
- 12. Come posso rimuovere un simbolo da un oggetto condiviso?
- 13. Come rimuovere solo un'istanza di un oggetto da un NSMutableArray?
- 14. Come rimuovere un singolo parametro da un oggetto richiesta Symfony2
- 15. Come restituire un arraylist da un metodo
- 16. Come rimuovere un oggetto da una matrice in Immutable?
- 17. Ordina un ArrayList in base a un campo di oggetto
- 18. Eliminazione di oggetti da un ArrayList in Java
- 19. spostamento dei dati da un HashSet a ArrayList in Java
- 20. Come rimuovere le voci duplicate modulo ArrayList in java
- 21. HashMap (chiave: String, valore: ArrayList) restituisce un oggetto anziché ArrayList?
- 22. Come creare un ArrayList da una matrice in PowerShell?
- 23. Come ordinare un arraylist di oggetti java?
- 24. ArrayList - Come modificare un membro di un oggetto?
- 25. Ordinamento di un oggetto ArrayList in base a un valore di attributo in Java
- 26. Arraylist in oggetto parcellizzabile
- 27. Ottenere l'indice di un oggetto in un arraylist;
- 28. Come rimuovere BOM da un file XML in Java
- 29. Come rimuovere un elemento da un IGogruppo
- 30. Impostare un oggetto data Java da un oggetto DateTime Notes
Puoi essere più preciso nel descrivere la tua domanda? scrivi uno snippet del codice su cui stai lavorando ... – aleroot