Uklonite prvi element s popisa

1. Pregled

U ovom super brzom vodiču pokazat ćemo kako ukloniti prvi element iz a Popis.

Izvest ćemo ovu operaciju za dvije uobičajene implementacije Popis sučelje - ArrayList i LinkedList.

2. Stvaranje a Popis

Prvo, popunimo naše Popiss:

@Prije javne void init () {list.add ("mačka"); list.add ("pas"); list.add ("svinja"); list.add ("krava"); list.add ("jarac"); linkedList.add ("mačka"); linkedList.add ("pas"); linkedList.add ("svinja"); linkedList.add ("krava"); linkedList.add ("jarac"); }

3. ArrayList

Drugo, uklonimo prvi element iz ArrayList, i pobrinite se da ga naš popis više ne sadrži:

@Test javna praznina givenList_whenRemoveFirst_thenRemoved () {list.remove (0); assertThat (popis, hasSize (4)); assertThat (popis, ne (sadrži ("mačka"))); }

Kao što je gore prikazano, koristimo ukloniti (indeks) metoda za uklanjanje prvog elementa - ovo će također raditi za bilo koju provedbu Popis sučelje.

4. LinkedList

LinkedList također provodi ukloniti (indeks) metoda (na svoj način), ali ima i removeFirst () metoda.

Pobrinimo se da radi prema očekivanjima:

@Test javna praznina givenLinkedList_whenRemoveFirst_thenRemoved () {linkedList.removeFirst (); assertThat (linkedList, hasSize (4)); assertThat (linkedList, not (contains ("cat"))); }

5. Složenost vremena

Iako metode izgledaju slično, njihova se učinkovitost razlikuje. ArrayList‘S ukloniti() metoda zahtijeva O (n) vrijeme, dok LinkedList‘S removeFirst () metoda zahtijeva O (1) vrijeme.

Ovo je zbog ArrayList koristi niz ispod haube, a ukloniti() operacija zahtijeva kopiranje ostatka niza na početak. Što je niz veći, to je potrebno više elemenata pomaknuti.

Za razliku od toga, LinkedList koristi pokazivače što znači da svaki element pokazuje na sljedeći i prethodni.

Stoga uklanjanje prvog elementa znači samo promjenu pokazivača na prvi element. Ova operacija uvijek zahtijeva isto vrijeme, ovisno o veličini popisa.

6. Zaključak

U ovom smo članku opisali kako ukloniti prvi element iz a Popis, i uspoređivali su učinkovitost ove operacije za ArrayList i LinkedList implementacije.

Kao i obično, cjeloviti izvorni kod dostupan je na GitHubu.