Pridanie prvku do poľa Java Array vs ArrayList

1. Prehľad

V tomto výučbe sa v krátkosti pozrieme na podobnosti a odlišnosti v alokácii pamäte medzi poľami Java a štandardom. ArrayList. Ďalej uvidíme, ako pridať a vložiť prvky do poľa a ArrayList.

2. Java Arrays a ArrayList

Pole Java je základná dátová štruktúra poskytovaná jazykom. Naproti tomu ArrayList je implementácia Zoznam rozhranie podporované poľom a je poskytované v rámci Java Collections Framework.

2.1. Prístup a úpravy prvkov

K prvkom poľa môžeme pristupovať a meniť ich pomocou notácie v hranatých zátvorkách:

System.out.println (anArray [1]); anArray [1] = 4;

Na druhej strane, ArrayList má súbor metód na prístup a úpravu prvkov:

int n = anArrayList.get (1); anArrayList.set (1, 4);

2.2. Pevná vs dynamická veľkosť

Pole a ArrayList obaja prideľujú haldy pamäte podobným spôsobom, ale líši sa tým pole má pevnú veľkosť, zatiaľ čo veľkosť súboru ArrayList rastie dynamicky.

Pretože pole Java má pevnú veľkosť, potrebujeme poskytnúť veľkosť pri jej inštancii. Po vytvorení inštancie nie je možné zväčšiť veľkosť poľa. Namiesto toho musíme vytvoriť nové pole s upravenou veľkosťou a skopírovať všetky prvky z predchádzajúceho poľa.

ArrayList je zmena veľkosti poľa implementácie Zoznam rozhranie - to znamená, ArrayList rastie dynamicky s pridávaním prvkov. Keď sa počet aktuálnych prvkov (vrátane nového prvku, ktorý sa má pridať do súboru) ArrayList) je väčšia ako maximálna veľkosť jeho základného poľa, potom ArrayList zväčšuje veľkosť základného poľa.

Stratégia rastu pre základné pole závisí od implementácie ArrayList. Pretože však veľkosť základného poľa nemožno dynamicky zväčšiť, vytvorí sa nové pole a staré prvky poľa sa skopírujú do nového poľa.

Operácia pridania má neustále amortizované časové náklady. Inými slovami, pridanie n prvky do ArrayList vyžaduje O (n) čas.

2.3. Typy prvkov

Pole môže obsahovať primitívne aj neprimitívne dátové typy v závislosti od definície poľa. Avšak an ArrayList môže obsahovať iba neprimitívne typy údajov.

Keď vložíme prvky s primitívnymi dátovými typmi do ArrayList, kompilátor Java automaticky prevedie primitívny dátový typ na zodpovedajúcu triedu obalových objektov.

Poďme sa teraz pozrieť na to, ako pridať a vložiť prvky do polí Java a ArrayList.

3. Pripojenie prvku

Ako sme už videli, polia majú pevnú veľkosť.

Ak teda chcete pridať prvok, najskôr musíme deklarovať nové pole, ktoré je väčšie ako staré pole, a skopírovať prvky zo starého poľa do novo vytvoreného poľa. Potom môžeme do tohto novo vytvoreného poľa pridať nový prvok.

Pozrime sa na jeho implementáciu v prostredí Java bez použitia akýchkoľvek tried nástrojov:

public Integer [] addElementUsingPureJava (Integer [] srcArray, int elementToAdd) {Integer [] destArray = new Integer [srcArray.length + 1]; pre (int i = 0; i <srcArray.length; i ++) {destArray [i] = srcArray [i]; } destArray [destArray.length - 1] = elementToAdd; návrat destArray; }

Striedavo Polia triedy poskytuje úžitkovú metódu kópia(), ktorý pomáha pri vytváraní nového poľa väčšej veľkosti a kopírovaní všetkých prvkov zo starého poľa:

int [] destArray = Arrays.copyOf (srcArray, srcArray.length + 1);

Keď sme vytvorili nové pole, môžeme k nemu ľahko pridať nový prvok:

destArray [destArray.length - 1] = elementToAdd;

Na druhej strane, pridanie prvku do priečinka ArrayList je celkom ľahké:

anArrayList.add (newElement);

4. Vloženie prvku do indexu

Vloženie prvku do daného indexu bez straty predtým pridaných prvkov nie je v poliach jednoduchou úlohou.

Najskôr, ak pole už obsahuje počet prvkov rovný jeho veľkosti, potom musíme najskôr vytvoriť nové pole s väčšou veľkosťou a prvky skopírovať do nového poľa.

Ďalej musíme posunúť všetky prvky, ktoré nasledujú po zadanom indexe, o jednu pozíciu doprava:

public static int [] insertAnElementAtAGivenIndex (final int [] srcArray, int index, int newElement) {int [] destArray = new int [srcArray.length + 1]; int j = 0; for (int i = 0; i <destArray.length-1; i ++) {if (i == index) {destArray [i] = newElement; } else {destArray [i] = srcArray [j]; j ++; }} vratit destArray; }

Avšak ArrayUtils trieda nám poskytuje jednoduchšie riešenie na vkladanie položiek do poľa:

int [] destArray = ArrayUtils.insert (2, srcArray, 77);

Musíme určiť index, do ktorého chceme vložiť hodnotu, zdrojové pole a hodnotu, ktorú chceme vložiť.

The vložiť () metóda vráti nové pole obsahujúce väčší počet prvkov, pričom nový prvok bude v zadanom indexe a všetky ostatné prvky budú posunuté o jednu pozíciu doprava.

Všimnite si, že posledný argument z vložiť () metóda je premenný argument, takže do poľa môžeme vložiť ľubovoľný počet položiek.

Použijeme ho na vloženie troch prvkov srcArray začínajúce indexom dva:

int [] destArray = ArrayUtils.insert (2, srcArray, 77, 88, 99);

A zvyšné prvky sa posunú o tri miesta doprava.

Ďalej to možno dosiahnuť triviálne pre ArrayList:

anArrayList.add (index, newElement);

ArrayList posunie prvky a vloží prvok na požadované miesto.

5. Záver

V tomto článku sme sa pozreli na pole Java a ArrayList. Ďalej sme sa pozreli na podobnosti a rozdiely medzi nimi. Nakoniec sme videli, ako pridať a vložiť prvky do poľa a ArrayList.

Celý zdrojový kód pracovných príkladov je ako vždy k dispozícii na stránkach GitHub.


$config[zx-auto] not found$config[zx-overlay] not found