Ho un array di stringhe (String[]
) e devo rimuovere il primo elemento. Come posso farlo in modo efficiente?Qual è il modo migliore per rimuovere il primo elemento da un array?
risposta
La dimensione degli array in Java non può essere modificata. Quindi, tecnicamente non puoi rimuovere alcun elemento dall'array.
Un modo per simulare la rimozione di un elemento dall'array consiste nel creare un nuovo array più piccolo e quindi copiare tutti gli elementi dall'array originale nel nuovo array più piccolo.
String[] yourArray = Arrays.copyOfRange(oldArr, 1, oldArr.length);
Tuttavia, non vorrei suggerire il metodo di cui sopra. Dovresti davvero usare uno List<String>
. Le liste ti consentono di aggiungere e rimuovere elementi da qualsiasi indice. Sarebbe simile al seguente:
List<String> list = new ArrayList<String>(); // or LinkedList<String>();
list.add("Stuff");
// add lots of stuff
list.remove(0); // removes the first item
È importante notare che la rimozione del primo elemento di un 'ArrayList' è O (n). –
@Matt, per un array e l'elenco. Ma il codice è molto più semplice per la lista. – jjnguy
Per un array e un 'ArrayList', ma non per' LinkedList'. –
Il modo più semplice è probabilmente il seguente: è fondamentalmente necessario costruire un nuovo array con un elemento più piccolo, quindi copiare gli elementi che si desidera mantenere nelle posizioni corrette.
int n=oldArray.length-1;
String[] newArray=new String[n];
System.arraycopy(oldArray,1,newArray,0,n);
Nota che se vi trovate a fare questo tipo di operazione di frequente, potrebbe essere un segno che si dovrebbe effettivamente utilizzare un diverso tipo di struttura dati, per esempio una lista collegata. La costruzione di un nuovo array ogni volta è un'operazione O (n), che può diventare costosa se l'array è di grandi dimensioni. Una lista concatenata ti darebbe O (1) rimozione del primo elemento.
Un'idea alternativa non è quella di rimuovere il primo elemento, ma solo di incrementare un numero intero che punta al primo indice che è in uso. Gli utenti dell'array dovranno tenere conto di questo offset, ma questo può essere un approccio efficiente. La classe Java String utilizza effettivamente questo metodo internamente durante la creazione di sottostringhe.
Non puoi farlo affatto, figuriamoci in fretta. Le matrici in Java sono di dimensioni fisse. Due cose che potresti fare sono:
- Sposta ogni elemento verso l'alto, quindi imposta l'ultimo elemento su null.
- Creare un nuovo array, quindi copiarlo.
È possibile utilizzare System.arraycopy
per uno di questi. Entrambi sono O (n), poiché copiano tutti tranne 1 elemento.
Se si rimuoverà spesso il primo elemento, prendere in considerazione l'utilizzo di LinkedList
. È possibile utilizzare LinkedList.remove
, che è dall'interfaccia Queue
, per comodità. Con LinkedList
, la rimozione del primo elemento è O (1). In realtà, la rimozione di qualsiasi elemento è O (1) quando si dispone di un ListIterator
in quella posizione. Tuttavia, l'accesso a un elemento arbitrario per indice è O (n).
Mantiene un indice del primo elemento "live" dell'array. Rimozione (fingendo di rimuovere) il primo elemento diventa quindi un'operazione di complessità temporale O(1)
.
Un brutto metodo alternativo: [? Come faccio a rimuovere gli oggetti da un array in Java]
String[] a ={"BLAH00001","DIK-11","DIK-2","MAN5"};
String[] k=Arrays.toString(a).split(", ",2)[1].split("]")[0].split(", ");
Per favore, qualcuno con una reputazione sufficiente invertire questa risposta - è esattamente quello che dice che è - brutto! Nessuna intenzione di essere scortese, ma nell'interesse della codificabilità, non pubblicare questo tipo di cose! – Penn
se stai già usando gli array, sarebbe meglio usare Arrays.copyOfRange –
- 1. Modo efficiente per ottenere/rimuovere il primo elemento dall'elenco?
- 2. Rimuovere il primo elemento di un array VBA
- 3. Il modo migliore per rimuovere un elemento arraylist da un altro arrayist
- 4. Come rimuovere il primo elemento in un array?
- 5. rimuovere primo elemento da array e restituire la matrice meno il primo elemento
- 6. Meteor: Nascondi o rimuovi elemento? Qual è il modo migliore
- 7. Il modo migliore per creare array singleton
- 8. Qual è il modo standard per rimuovere un elemento da un elenco in OCaml?
- 9. Qual è il modo migliore per rimuovere oggetti da un elenco
- 10. Qual è il modo migliore per chiudere un ramo Mercurial?
- 11. Il modo migliore per rimuovere un elemento da una lista all'interno di una mappa in Immutable.js
- 12. Qual è il modo migliore per creare un sub array da una matrice esistente in C++?
- 13. Qual è il modo migliore per convertire un array di byte in un IntStream?
- 14. Qual è il modo migliore per rilevare il colore bianco?
- 15. Come ottenere il primo elemento da un array PHP associativo?
- 16. Qual è il modo migliore per memorizzare un array in un database relazionale?
- 17. Angular2: Qual è il modo migliore per ottenere un riferimento di un elemento di modello
- 18. qual è il modo migliore per modificare file CSV
- 19. Qual è il modo migliore per ottenere il nome del tag di un elemento in JS?
- 20. In C#, qual è il modo migliore per trovare spazi vuoti in un array DateTime?
- 21. Qual è il modo migliore per rimuovere tutte le sottoview da te stesso.view?
- 22. Qual è il modo migliore per documentare il codice f #?
- 23. rimuovi il primo elemento dall'array
- 24. Qual è il modo migliore per affermare l'uguaglianza di numpy.array?
- 25. qual è il modo migliore per implementare hashCode()?
- 26. Fissare primo elemento, mischiare il resto di un elenco/array
- 27. Qual è il modo migliore per costruire un NSCompoundPredicate complesso?
- 28. Qual è il modo migliore per ridimensionare un oggetto BitmapData?
- 29. Il modo migliore per memorizzare un array nel database MySQL?
- 30. qual è il modo migliore per rappresentare latice esagonale
possibile duplicato (http://stackoverflow.com/questions/112503/how-do-i- remove-objects-from-an-array-in-java) – McDowell
Non un dupe.La domanda precedente riguarda la rimozione degli articoli in base al valore; si tratta di rimuovere un oggetto per indice. –