Java ArrayList je súčasťou Javy rámec zbierok a je to trieda balíka java.util. Poskytuje nám dynamické polia v jazyku Java. Aj keď môže byť pomalší ako štandardné polia, ale môže byť užitočný v programoch, kde je potrebné veľa manipulácie s poli. Táto trieda sa nachádza v java.util balík. Hlavný výhoda ArrayList v Jave je, že ak deklarujeme pole, musíme spomenúť veľkosť, ale v ArrayList nie je potrebné uvádzať veľkosť ArrayList. Ak chcete uviesť veľkosť, môžete to urobiť.
Obsah
- Čo je ArrayList v jazyku Java?
- Príklad Java ArrayList
- Dôležité funkcie ArrayList v jazyku Java
- Konštruktory v ArrayList
- ArrayList v metódach Java
- Operácie vykonávané v ArrayList
- Zložitosť Java ArrayList
- Výhody Java ArrayList
- Nevýhody Java ArrayList
- Záver
- Časté otázky o ArrayList
Čo je ArrayList v jazyku Java?
ArrayList je trieda Java implementovaná pomocou rozhrania List. Java ArrayList, ako už názov napovedá, poskytuje funkčnosť dynamického poľa, kde veľkosť nie je pevne stanovená ako pole. Ako súčasť rámca kolekcií má tiež veľa funkcií, ktoré nie sú dostupné pri poliach.
Ilustrácia:
Pozrime sa na ArrayList s typom objektu Integer, ktorý je v ňom uložený s obrázkom.
Príklad Java ArrayList
Príklad 1: Nasledujúca implementácia ukazuje, ako vytvoriť a používať ArrayList so zmienkou o jeho veľkosti.
Java // Java program to demonstrate the // working of ArrayList import java.io.*; import java.util.*; class ArrayListExample { public static void main(String[] args) { // Size of the // ArrayList int n = 5; // Declaring the ArrayList with // initial size n ArrayList arr1 = nový ArrayList (n); // Deklarovanie ArrayList ArrayList arr2 = nový ArrayList (); // Tlač zoznamu ArrayList System.out.println('Pole 1:' + arr1); System.out.println('Pole 2:' + arr2); // Pridanie nových prvkov na // koniec zoznamu pre (int i = 1; i<= n; i++) { arr1.add(i); arr2.add(i); } // Printing the ArrayList System.out.println('Array 1:' + arr1); System.out.println('Array 2:' + arr2); } }>
Výkon
Array 1:[] Array 2:[] Array 1:[1, 2, 3, 4, 5] Array 2:[1, 2, 3, 4, 5]>
Vysvetlenie vyššie uvedeného programu:
ArrayList je dynamické pole a pri jeho vytváraní nemusíme špecifikovať veľkosť, veľkosť poľa sa automaticky zväčšuje, keď dynamicky pridávame a odstraňujeme položky. Hoci skutočná implementácia knižnice môže byť zložitejšia, toto je veľmi základná myšlienka vysvetľujúca fungovanie poľa, keď sa pole zaplní a ak sa pokúsime pridať položku:
- Vytvára väčšiu pamäť na haldovej pamäti (napríklad pamäť dvojnásobnej veľkosti).
- Skopíruje aktuálne prvky pamäte do novej pamäte.
- Nová položka je pridaná teraz, pretože je teraz k dispozícii väčšia pamäť.
- Vymažte starú pamäť.
Dôležité funkcie ArrayList v jazyku Java
- ArrayList dedí AbstractList triedy a realizuje Rozhranie zoznamu .
- ArrayList sa inicializuje podľa veľkosti. Veľkosť sa však automaticky zväčší, ak kolekcia rastie alebo sa zmenšuje predmety sú odstránené zo zbierky.
- Java ArrayList nám umožňuje náhodný prístup k zoznamu.
- ArrayList nemožno použiť pre obalová trieda pre takéto prípady.
- ArrayList v jazyku Java môže byť videný ako a vektor v C++ .
- ArrayList nie je synchronizovaný. Jeho ekvivalentná synchronizovaná trieda v jazyku Java je Vektor .
Pochopme, Java ArrayList do hĺbky . Pozrite sa na obrázok nižšie:
Na obrázku vyššie AbstractList , CopyOnWriteArrayList , a AbstractSequentialList sú triedy, ktoré implementujú rozhranie zoznamu. V každej zo spomínaných tried je implementovaná samostatná funkcionalita. Oni sú:
- AbstractList: Táto trieda sa používa na implementáciu nemodifikovateľného zoznamu, pre ktorý je potrebné iba rozšíriť túto triedu AbstractList a implementovať iba dostať () a veľkosť () metódy.
- CopyOnWriteArrayList: Táto trieda implementuje rozhranie zoznamu. Ide o rozšírenú verziu ArrayList v ktorom sú všetky úpravy (pridať, nastaviť, odstrániť atď.) implementované vytvorením novej kópie zoznamu.
- AbstractSequentialList: Táto trieda implementuje Rozhranie zberu a trieda AbstractCollection. Táto trieda sa používa na implementáciu nemodifikovateľného zoznamu, pre ktorý je potrebné iba rozšíriť túto triedu AbstractList a implementovať iba dostať () a veľkosť () metódy.
Konštruktory v ArrayList v Jave
Aby sme vytvorili ArrayList, musíme vytvoriť objekt triedy ArrayList. Trieda ArrayList pozostáva z rôznych konštruktérov ktoré umožňujú možné vytvorenie zoznamu polí. V tejto triede sú dostupné nasledujúce konštruktory:
1. ArrayList()
Tento konštruktor sa používa na vytvorenie prázdneho zoznamu polí. Ak chceme vytvoriť prázdny ArrayList s názvom arr , potom môže byť vytvorený ako:
ArrayList arr = new ArrayList();>
2. ArrayList (Kolekcia c)
Tento konštruktor sa používa na zostavenie zoznamu polí inicializovaného prvkami z kolekcie c. Predpokladajme, že chceme vytvoriť ArrayList arr, ktorý obsahuje prvky prítomné v kolekcii c, potom môže byť vytvorený ako:
ArrayList arr = new ArrayList(c);>
3. ArrayList (int kapacita)
Tento konštruktor sa používa na zostavenie zoznamu polí so špecifikovanou počiatočnou kapacitou. Predpokladajme, že chceme vytvoriť ArrayList s počiatočnou veľkosťou N, potom ho možno vytvoriť ako:
ArrayList arr = new ArrayList(N);>
Metódy Java ArrayList
Metóda | Popis |
---|---|
add(int index, Object element) | Táto metóda sa používa na vloženie špecifického prvku na konkrétnu pozíciu indexu v zozname. |
pridať (objekt o) | Táto metóda sa používa na pripojenie konkrétneho prvku na koniec zoznamu. |
addAll(Kolekcia C) | Táto metóda sa používa na pripojenie všetkých prvkov z konkrétnej kolekcie na koniec uvedeného zoznamu v takom poradí, aby hodnoty vrátil iterátor danej kolekcie. |
addAll(int index, kolekcia C) | Používa sa na vloženie všetkých prvkov začínajúcich na zadanej pozícii z konkrétnej kolekcie do uvedeného zoznamu. |
jasný() | Táto metóda sa používa na odstránenie všetkých prvkov z ľubovoľného zoznamu. |
klon() | Táto metóda sa používa na vrátenie plytkej kópie ArrayList v jazyku Java. |
obsahuje? (Objekt o) | Vráti hodnotu true, ak tento zoznam obsahuje zadaný prvok. |
secureCapacity? (int minCapacity) | Ak je to potrebné, zvýši kapacitu tejto inštancie ArrayList, aby sa zabezpečilo, že môže obsahovať aspoň počet prvkov špecifikovaných argumentom minimálnej kapacity. |
pre každého? (spotrebiteľská akcia) | Vykoná danú akciu pre každý prvok Iterable, kým nie sú spracované všetky prvky alebo kým akcia nevyvolá výnimku. |
získať? (int index) | Vráti prvok na zadanej pozícii v tomto zozname. |
indexOf(Objekt O) | Index prvého výskytu konkrétneho prvku je buď vrátený alebo -1 v prípade, že prvok nie je v zozname. |
je prázdny?() | Vráti hodnotu true, ak tento zoznam neobsahuje žiadne prvky. |
lastIndexOf(Object O) | V prípade, že prvok nie je v zozname, vráti sa index posledného výskytu konkrétneho prvku alebo -1. |
listIterator?() | Vráti iterátor zoznamu nad prvkami v tomto zozname (v správnom poradí). |
listIterator? (index int) | Vráti iterátor zoznamu nad prvkami v tomto zozname (v správnom poradí), počnúc od zadanej pozície v zozname. |
odstrániť? (int index) | Odstráni prvok na zadanej pozícii v tomto zozname. |
odstrániť? (Objekt o) | Odstráni prvý výskyt zadaného prvku z tohto zoznamu, ak je prítomný. |
odstrániť všetko? (Kolekcia c) | Odstráni z tohto zoznamu všetky jeho prvky, ktoré sú obsiahnuté v zadanej kolekcii. |
removeIf? (Filter predikátov) | Odstráni všetky prvky tejto kolekcie, ktoré spĺňajú daný predikát. |
removeRange?(int fromIndex, int toIndex) | Odstráni z tohto zoznamu všetky prvky, ktorých index je medzi fromIndex, vrátane, a toIndex, bez. |
keepAll? (Kolekcia c) | Zachová iba prvky v tomto zozname, ktoré sú obsiahnuté v zadanej kolekcii. |
set? (index int, prvok E) | Nahradí prvok na zadanej pozícii v tomto zozname zadaným prvkom. |
veľkosť? () | Vráti počet prvkov v tomto zozname. |
rozdeľovač? () | Vytvorí rozdeľovač s oneskorenou väzbou a rýchlym zlyhaním nad prvkami v tomto zozname. |
subList?(int fromIndex, int toIndex) | Vráti pohľad na časť tohto zoznamu medzi zadaným fromIndex, vrátane, a toIndex, bez. |
toArray() | Táto metóda sa používa na vrátenie poľa obsahujúceho všetky prvky v zozname v správnom poradí. |
toArray(Object[] O) | Používa sa tiež na vrátenie poľa obsahujúceho všetky prvky v tomto zozname v správnom poradí rovnako ako predchádzajúca metóda. |
trimToSize() | Táto metóda sa používa na orezanie kapacity inštancie ArrayList na aktuálnu veľkosť zoznamu. |
Poznámka: Môžete tiež vytvoriť všeobecný ArrayList:
// Vytvorenie všeobecného celého čísla ArrayList
ArrayList arrli = new ArrayList();
Niektoré kľúčové body ArrayList v Jave
- ArrayList je podčiarknuté pole s meniteľnou veľkosťou dátovej štruktúry alebo pole s možnosťou rastu.
- Duplikáty ArrayList sú povolené.
- Objednávka vloženia je zachovaná.
- Heterogénne predmety sú povolené.
- Vloženie nuly je možné.
Pozrime sa, ako vykonať niektoré základné operácie na zozname ArrayList, ako je uvedené, o ktorých budeme ďalej diskutovať popri implementácii každej operácie.
- Pridanie prvku do zoznamu/Pridanie prvku
- Zmena elementov/ Set element
- Odstránenie prvkov/Odstrániť prvok
- Iterujúce prvky
- získať prvky
- pridajte prvky medzi dve čísla
- Triediace prvky
- Veľkosť ArrayList
Operácie vykonávané v ArrayList
1. Pridávanie prvkov
Na pridanie prvku do ArrayList môžeme použiť metóda add(). . Táto metóda je preťažená na vykonávanie viacerých operácií na základe rôznych parametrov. Sú nasledovné:
- add(Object): Táto metóda sa používa na pridanie prvku na koniec ArrayList.
- add(int index, Object): Táto metóda sa používa na pridanie prvku do špecifického indexu v ArrayList.
Nižšie je uvedená implementácia vyššie uvedeného prístupu:
súbor c++Java
// Java Program to Add elements to An ArrayList // Importing all utility classes import java.util.*; // Main class class GFG { // Main driver method public static void main(String args[]) { // Creating an Array of string type ArrayListal = new ArrayList(); // Pridanie prvkov do ArrayList // Vlastné vstupy al.add('Geeks'); al.add('Geeks'); // Tu spomíname index //, do ktorého sa má pridať al.add(1, 'For'); // Tlač všetkých prvkov v ArrayList System.out.println(al); } }>
Výkon
[Geeks, For, Geeks]>
2. Zmena prvkov
Po pridaní prvkov, ak chceme prvok zmeniť, je možné to urobiť pomocou set() metóda. Keďže ArrayList je indexovaný, na prvok, ktorý chceme zmeniť, odkazuje index prvku. Preto táto metóda berie index a aktualizovaný prvok, ktorý je potrebné vložiť do tohto indexu.
Nižšie je uvedená implementácia vyššie uvedeného prístupu:
Java // Java Program to Change elements in ArrayList // Importing all utility classes import java.util.*; // main class class GFG { // Main driver method public static void main(String args[]) { // Creating an Arraylist object of string type ArrayListal = new ArrayList(); // Pridanie prvkov do Arraylistu // Vlastné vstupné prvky al.add('Geeks'); al.add('Geeks'); // Pridanie špecifikujúceho index, ktorý sa má pridať al.add(1, 'Geeks'); // Tlač prvkov Arraylist System.out.println('Initial ArrayList ' + al); // Nastavenie prvku na 1. index al.set(1, 'For'); // Tlač aktualizovaného zoznamu polí System.out.println('Updated ArrayList ' + al); } }>
Výkon
Initial ArrayList [Geeks, Geeks, Geeks] Updated ArrayList [Geeks, For, Geeks]>
3. Odstraňovanie prvkov
Na odstránenie prvku z ArrayList môžeme použiť metódu remove(). . Táto metóda je preťažená na vykonávanie viacerých operácií na základe rôznych parametrov. Sú nasledovné:
- odstrániť (Objekt): Táto metóda sa používa na jednoduché odstránenie objektu z ArrayList. Ak existuje viacero takýchto objektov, potom sa prvý výskyt objektu odstráni.
- remove(int index): Keďže ArrayList je indexovaný, táto metóda nadobudne celočíselnú hodnotu, ktorá jednoducho odstráni prvok prítomný na tomto špecifickom indexe v ArrayList. Po odstránení prvku sa všetky prvky presunú doľava, aby vyplnili priestor a indexy objektov sa aktualizujú.
Príklad:
Java // Java program to Remove Elements in ArrayList // Importing all utility classes import java.util.*; // Main class class GFG { // Main driver method public static void main(String args[]) { // Creating an object of arraylist class ArrayListal = new ArrayList(); // Pridanie prvkov do ArrayList // Vlastné pridanie al.add('Geeks'); al.add('Geeks'); // Pridanie prvku na konkrétny index al.add(1, 'For'); // Tlač všetkých prvkov ArrayList System.out.println('Initial ArrayList ' + al); // Odstránenie prvku zhora ArrayList al.remove(1); // Tlač aktualizovaných prvkov Arraylist System.out.println('Po odstránení indexu ' + al); // Odstránenie tohto prvku slova v ArrayList al.remove('Geeks'); // Teraz sa tlačí aktualizovaný ArrayList System.out.println('Po odstránení objektu ' + al); } }>
Výkon
Initial ArrayList [Geeks, For, Geeks] After the Index Removal [Geeks, Geeks] After the Object Removal [Geeks]>
4. Iterácia ArrayList
Existuje niekoľko spôsobov, ako iterovať cez ArrayList. Najznámejšie spôsoby sú pomocou základného pre slučku v kombinácii s a get() metóda získať prvok na konkrétnom indexe a pokročilé pre slučku .
Príklad
Java // Java program to Iterate the elements // in an ArrayList // Importing all utility classes import java.util.*; // Main class class GFG { // Main driver method public static void main(String args[]) { // Creating an Arraylist of string type ArrayListal = new ArrayList(); // Pridanie prvkov do ArrayList // pomocou štandardnej metódy add() al.add('Geeks'); al.add('Geeks'); al.add(1, 'Pre'); // Pomocou metódy Get a cyklu // for for (int i = 0; i< al.size(); i++) { System.out.print(al.get(i) + ' '); } System.out.println(); // Using the for each loop for (String str : al) System.out.print(str + ' '); } }>
Výkon
Geeks For Geeks Geeks For Geeks>
5. Získajte prvky
Java // Java program to get the elemens in ArrayList import java.io.*; import java.util.*; class GFG { public static void main (String[] args) { ArrayList zoznam = new ArrayList(); // pridanie číselného zoznamu.add(9); zoznam.pridaj(5); zoznam.pridaj(6); System.out.println(zoznam); // získanie metódy Integer n= zoznam.get(1); System.out.println('číslo indexu 1 je:'+n); } }>
Výkon
[9, 5, 6] at indext 1 number is:5>
6. Pridajte prvky medzi dve čísla
Java // Java program to add the elements // between two numbers in ArrayList import java.io.*; import java.util.*; class GFG { public static void main(String[] args) { ArrayList zoznam = new ArrayList(); zoznam.pridaj(1); zoznam.pridaj(2); zoznam.pridaj(4); System.out.println(zoznam); // vloženie chýbajúceho prvku 3 list.add(2, 3); System.out.println(zoznam); } }>
Výkon
[1, 2, 4] [1, 2, 3, 4]>
7. Zoradenie ArrayList
Java // Java Program for ArrayList Sorting import java.io.*; import java.util.*; class GFG { public static void main(String[] args) { ArrayList zoznam = new ArrayList(); zoznam.pridaj(2); zoznam.pridaj(4); zoznam.pridaj(3); zoznam.pridaj(1); System.out.println('Pred zoradením zoznamu:'); System.out.println(zoznam); Collections.sort(zoznam); System.out.println('po zoradení zoznamu:'); System.out.println(zoznam); } }>
Výkon
Before sorting list: [2, 4, 3, 1] after sorting list: [1, 2, 3, 4]>
8. Veľkosť prvkov
Java // Java program to find the size // of elements of an ArrayList import java.io.*; import java.util.*; class GFG { public static void main(String[] args) { ArrayList zoznam = new ArrayList(); zoznam.pridaj(1); zoznam.pridaj(2); zoznam.pridaj(3); zoznam.pridaj(4); int b = zoznam.velkost(); System.out.println('Veľkosť je :' + b); } }>
Výkon
The size is :4>
Zložitosť Java ArrayList
Prevádzka | Časová zložitosť | Priestorová zložitosť |
---|---|---|
Vloženie prvku do ArrayList | O(1) | O(N) |
Odstránenie prvku z ArrayList | O(N) | O(1) |
Prechádzanie prvkami v ArrayList | O(N) | O(N) |
Nahradenie prvkov v ArrayList | O(1) | O(1) |
ArrayList v jazyku Java je trieda v rámci Java Collections, ktorá implementuje rozhranie List. Tu sú výhody a nevýhody používania ArrayList v Jave.
Výhody Java ArrayList
- Dynamická veľkosť: ArrayList môže dynamicky rásť a zmenšovať veľkosť, čo uľahčuje pridávanie alebo odstraňovanie prvkov podľa potreby.
- Jednoduché použitie: ArrayList sa jednoducho používa, vďaka čomu je obľúbenou voľbou pre mnohých vývojárov Java.
- Rýchly prístup: ArrayList poskytuje rýchly prístup k prvkom, pretože je implementovaný ako pole pod kapotou.
- Usporiadaná kolekcia: ArrayList zachováva poradie prvkov, čo vám umožňuje pristupovať k prvkom v poradí, v akom boli pridané.
- Podporuje hodnoty null: ArrayList môže ukladať hodnoty null, čo je užitočné v prípadoch, keď je potrebné reprezentovať neprítomnosť hodnoty.
Nevýhody Java ArrayList
- Pomalšie ako polia: ArrayList je pomalší ako polia pre určité operácie, ako je vkladanie prvkov do stredu zoznamu.
- Zvýšené využitie pamäte: ArrayList vyžaduje viac pamäte ako polia, pretože si potrebuje zachovať svoju dynamickú veľkosť a zvládnuť zmenu veľkosti.
- Nie je bezpečný pre vlákna: ArrayList nie je bezpečný pre vlákna, čo znamená, že viaceré vlákna môžu pristupovať a upravovať zoznam súčasne, čo vedie k potenciálnemu súpereniu a poškodeniu údajov.
- Zhoršenie výkonu: Výkon ArrayListu sa môže znížiť so zvyšujúcim sa počtom prvkov v zozname, najmä pri operáciách, ako je vyhľadávanie prvkov alebo vkladanie prvkov do stredu zoznamu.
Záver
Body, ktoré si treba zapamätať z tohto článku, sú uvedené nižšie:
- ArrayList je súčasťou rámca kolekcií. Zdedí triedu AbstractList a implementuje rozhranie List.
- ArrayList je implementácia dynamického poľa.
- ArrayList možno inicializovať pomocou rôznych typov konštruktorov, ako napríklad bez parametrov, odovzdanie kolekcie ako parametra a odovzdanie celého čísla ako parametra.
- Operácie je možné vykonávať v ArrayList nasledovne: Pridávanie, odstraňovanie, iterovanie a triedenie.
Časté otázky týkajúce sa ArrayList
Čo je ArrayList v jazyku Java?
ArrayList v jazyku Java je súčasťou frameworku Collections. Slúži na ukladanie prvkov a veľkosť je meniteľná.
Ako sú údaje uložené v ArrayList?
ArrayList môže ukladať dáta až do zaplnenia veľkosti ArrayList, potom sa veľkosť ArrayList zdvojnásobí, ak chceme uložiť ďalšie prvky.
Umožňuje ArrayList duplikáty?
Áno, ArrayList umožňuje ukladanie duplicitných hodnôt.