Rimozione del primo elemento di un array

1. Panoramica

In questo tutorial vedremo come rimuovere il primo elemento di un array .

Inoltre, vedremo anche come l'utilizzo di strutture dati da Java Collections Framework renda le cose ancora più semplici.

2. Utilizzo di Arrays.copyOfRange ()

Prima di tutto, la rimozione di un elemento di un array non è tecnicamente possibile in Java . Per citare i documenti ufficiali:

“Un array è un oggetto contenitore che contiene un numero fisso di valori di un singolo tipo. La lunghezza di un array viene stabilita quando viene creato l'array. Dopo la creazione, la sua lunghezza è fissata. "

Ciò significa che finché lavoriamo direttamente con un array, tutto ciò che possiamo fare è creare un nuovo array di dimensioni più piccole, che quindi non contiene il primo elemento .

Fortunatamente il JDK fornisce una comoda funzione di supporto statico che possiamo usare, chiamata Arrays.copyOfRange () :

String[] stringArray = {"foo", "bar", "baz"}; String[] modifiedArray = Arrays.copyOfRange(stringArray, 1, stringArray.length);

Notare che questa operazione ha un costo di O (n) poiché creerà ogni volta un nuovo array.

Ovviamente, questo è un modo complicato per rimuovere un elemento dall'array e se si eseguono regolarmente tali operazioni, potrebbe essere più sensato utilizzare invece Java Collections Framework.

3. Utilizzo di un'implementazione di elenco

Per mantenere più o meno la stessa semantica della struttura dei dati (una sequenza ordinata di elementi accessibili per indice), ha senso utilizzare un'implementazione dell'interfaccia List .

Le due implementazioni più comuni sono ArrayList e LinkedList .

Supponiamo di avere le seguenti liste :

List arrayList = new ArrayList(); // populate the ArrayList List linkedList = new LinkedList(); // populate the LinkedList

Poiché entrambe le classi implementano la stessa interfaccia, il codice di esempio per rimuovere il primo elemento ha lo stesso aspetto:

arrayList.remove(0); linkedList.remove(0);

Nel caso di ArrayList , il costo della rimozione è O (n) , mentre LinkedList ha un costo di O (1) .

Ora, questo non significa che dovremmo usare una LinkedList ovunque come impostazione predefinita poiché il costo per il recupero di un oggetto è il contrario. Il costo per chiamare get (i) è O (1) nel caso di ArrayList e O (n) nel caso di LinkedList .

4. Conclusione

Abbiamo visto come rimuovere il primo elemento di un array in Java. Inoltre, abbiamo esaminato come ottenere lo stesso risultato utilizzando Java Collections Framework.

Puoi trovare il codice di esempio su GitHub.