logo

Java ArrayList

Hierarchia tried Java ArrayList

Java ArrayList trieda používa a dynamický pole na uloženie prvkov. Je to ako pole, ale existuje bez obmedzenia veľkosti . Prvky môžeme kedykoľvek pridať alebo odstrániť. Je teda oveľa flexibilnejší ako tradičné pole. Nachádza sa v java.util balík. Je to ako Vector v C++.

ArrayList v jazyku Java môže mať tiež duplicitné prvky. Implementuje rozhranie Zoznam, takže tu môžeme použiť všetky metódy rozhrania Zoznam. ArrayList interne udržiava poradie vloženia.

Zdedí triedu AbstractList a implementuje Rozhranie zoznamu .

Dôležité body o triede Java ArrayList sú:

  • Trieda Java ArrayList môže obsahovať duplicitné prvky.
  • Trieda Java ArrayList udržiava poradie vkladania.
  • Trieda Java ArrayList nie je synchronizované .
  • Java ArrayList umožňuje náhodný prístup, pretože pole funguje na základe indexu.
  • V ArrayList je manipulácia o niečo pomalšia ako LinkedList v Jave, pretože ak je akýkoľvek prvok odstránený zo zoznamu polí, musí dôjsť k veľkému posunu.
  • Nemôžeme vytvoriť zoznam polí primitívnych typov, ako sú int, float, char atď. V takýchto prípadoch je potrebné použiť požadovanú obalovú triedu. Napríklad:
 ArrayList al = ArrayList(); // does not work ArrayList al = new ArrayList(); // works fine 
  • Java ArrayList sa inicializuje podľa veľkosti. Veľkosť je v zozname polí dynamická, ktorá sa mení v závislosti od pridaných alebo odstránených prvkov zo zoznamu.

Hierarchia triedy ArrayList

Ako je znázornené na obrázku vyššie, trieda Java ArrayList rozširuje triedu AbstractList, ktorá implementuje rozhranie List. Rozhranie zoznamu rozširuje Zbierka a Iterovateľné rozhrania v hierarchickom poradí.

Deklarácia triedy ArrayList

Pozrime sa na deklaráciu pre triedu java.util.ArrayList.

 public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, Serializable 

Konštruktéri ArrayList

Konštruktér Popis
ArrayList() Používa sa na vytvorenie zoznamu prázdnych polí.
ArrayList (kolekcia c) Používa sa na zostavenie zoznamu polí, ktorý sa inicializuje pomocou prvkov kolekcie c.
ArrayList (int kapacita) Používa sa na zostavenie zoznamu polí, ktorý má špecifikovanú počiatočnú kapacitu.

Metódy ArrayList

Metóda Popis
neplatné pridať (index int, prvok E) Používa sa na vloženie určeného prvku na určené miesto v zozname.
boolovská hodnota pridať (a a) Používa sa na pripojenie špecifikovaného prvku na koniec zoznamu.
boolean addAll (kolekcia c) Používa sa na pripojenie všetkých prvkov v zadanej kolekcii na koniec tohto zoznamu v poradí, v akom ich vráti iterátor zadanej kolekcie.
boolean addAll (index int, kolekcia c) Používa sa na pripojenie všetkých prvkov v zadanej kolekcii, počnúc od zadanej pozície zoznamu.
neplatné jasné () Používa sa na odstránenie všetkých prvkov z tohto zoznamu.
void secureCapacity (int requiredCapacity) Používa sa na zvýšenie kapacity inštancie ArrayList.
E get (int index) Používa sa na získanie prvku z konkrétnej pozície v zozname.
boolean isEmpty() Ak je zoznam prázdny, vráti hodnotu true, inak hodnotu false.
Iterátor()
listIterator()
int lastIndexOf(Object o) Používa sa na vrátenie indexu v tomto zozname posledného výskytu zadaného prvku alebo -1, ak zoznam tento prvok neobsahuje.
Object[] toArray() Používa sa na vrátenie poľa obsahujúceho všetky prvky v tomto zozname v správnom poradí.
T[] toArray(T[] a) Používa sa na vrátenie poľa obsahujúceho všetky prvky v tomto zozname v správnom poradí.
Object clone() Používa sa na vrátenie plytkej kópie ArrayList.
boolean obsahuje (Objekt o) Ak zoznam obsahuje zadaný prvok, vráti hodnotu true.
int indexOf(Objekt o) Používa sa na vrátenie indexu v tomto zozname prvého výskytu zadaného prvku alebo -1, ak zoznam tento prvok neobsahuje.
E odstrániť (int index) Používa sa na odstránenie prvku prítomného na zadanej pozícii v zozname.
boolovské odstránenie (objekt o) Používa sa na odstránenie prvého výskytu zadaného prvku.
boolean removeAll (kolekcia c) Používa sa na odstránenie všetkých prvkov zo zoznamu.
boolean removeIf (predikátový filter) Používa sa na odstránenie všetkých prvkov zo zoznamu, ktoré spĺňajú daný predikát.
protected void removeRange (int fromIndex, int toIndex) Používa sa na odstránenie všetkých prvkov v danom rozsahu.
void replaceAll (operátor UnaryOperator) Používa sa na nahradenie všetkých prvkov zo zoznamu zadaným prvkom.
void keepAll (kolekcia c) Používa sa na uchovanie všetkých prvkov v zozname, ktoré sa nachádzajú v zadanej kolekcii.
E sada (int index, E prvok) Používa sa na nahradenie zadaného prvku v zozname, ktorý sa nachádza na zadanej pozícii.
void sort (Comparator c) Používa sa na triedenie prvkov zoznamu na základe zadaného porovnávača.
Spliterator spliterator() Používa sa na vytvorenie rozdeľovača nad prvkami v zozname.
Zoznam podzoznam (int fromIndex, int toIndex) Používa sa na načítanie všetkých prvkov, ktoré sa nachádzajú v danom rozsahu.
int size() Používa sa na vrátenie počtu prvkov prítomných v zozname.
void trimToSize() Používa sa na orezanie kapacity tejto inštancie ArrayList na aktuálnu veľkosť zoznamu.

Java Negenerické vs. Generic Collection

Kolekčný rámec Java bol pred JDK 1.5 negenerický. Od 1.5 je to všeobecné.

Nová generická kolekcia Java vám umožňuje mať v kolekcii iba jeden typ objektu. Teraz je typovo bezpečný, takže typové obsadenie nie je potrebné za behu.

Pozrime sa na starý negenerický príklad vytvorenia kolekcie Java.

 ArrayList list=new ArrayList();//creating old non-generic arraylist 

Pozrime sa na nový všeobecný príklad vytvorenia kolekcie java.

 ArrayList list=new ArrayList();//creating new generic arraylist 

V generickej kolekcii špecifikujeme typ v hranatých zátvorkách. Teraz je ArrayList nútený mať v sebe jediný špecifikovaný typ objektu. Ak sa pokúsite pridať iný typ objektu, zobrazí sa a chyba pri kompilácii .

Pre viac informácií o generikách Java kliknite sem Java Generics Tutorial .

Príklad Java ArrayList

Názov súboru: ArrayListExample1.java

 import java.util.*; public class ArrayListExample1{ public static void main(String args[]){ ArrayList list=new ArrayList();//Creating arraylist list.add('Mango');//Adding object in arraylist list.add('Apple'); list.add('Banana'); list.add('Grapes'); //Printing the arraylist object System.out.println(list); } } 
Vyskúšajte to

Výkon:

[Mango, Apple, Banana, Grapes] 

Iterácia ArrayList pomocou Iterator

Pozrime sa na príklad prechodu prvkov ArrayList pomocou rozhrania Iterator.

Názov súboru: ArrayListExample2.java

stream filtra java
 import java.util.*; public class ArrayListExample2{ public static void main(String args[]){ ArrayList list=new ArrayList();//Creating arraylist list.add('Mango');//Adding object in arraylist list.add('Apple'); list.add('Banana'); list.add('Grapes'); //Traversing list through Iterator Iterator itr=list.iterator();//getting the Iterator while(itr.hasNext()){//check if iterator has the elements System.out.println(itr.next());//printing the element and move to next } } } 
Vyskúšajte to

Výkon:

Mango Apple Banana Grapes 

Iterácia ArrayList pomocou cyklu For-each

Pozrime sa na príklad prechodu prvkov ArrayList pomocou cyklu for-each

Názov súboru: ArrayListExample3.java

 import java.util.*; public class ArrayListExample3{ public static void main(String args[]){ ArrayList list=new ArrayList();//Creating arraylist list.add('Mango');//Adding object in arraylist list.add('Apple'); list.add('Banana'); list.add('Grapes'); //Traversing list through for-each loop for(String fruit:list) System.out.println(fruit); } } 

Výkon:

Vyskúšajte to
Mango Apple Banana Grapes 

Získajte a nastavte ArrayList

The get() metóda vráti prvok na zadanom indexe, zatiaľ čo metóda set(). zmení prvok.

Názov súboru: ArrayListExample4.java

 import java.util.*; public class ArrayListExample4{ public static void main(String args[]){ ArrayList al=new ArrayList(); al.add('Mango'); al.add('Apple'); al.add('Banana'); al.add('Grapes'); //accessing the element System.out.println('Returning element: '+al.get(1));//it will return the 2nd element, because index starts from 0 //changing the element al.set(1,'Dates'); //Traversing list for(String fruit:al) System.out.println(fruit); } } 
Vyskúšajte to

Výkon:

Returning element: Apple Mango Dates Banana Grapes 

Ako triediť ArrayList

The java.util balík poskytuje pomocnú triedu zbierky , ktorý má statickú metódu sort(). Pomocou Collections.sort() metóda, môžeme jednoducho triediť ArrayList.

Názov súboru: SortArrayList.java

 import java.util.*; class SortArrayList{ public static void main(String args[]){ //Creating a list of fruits List list1=new ArrayList(); list1.add('Mango'); list1.add('Apple'); list1.add('Banana'); list1.add('Grapes'); //Sorting the list Collections.sort(list1); //Traversing list through the for-each loop for(String fruit:list1) System.out.println(fruit); System.out.println('Sorting numbers...'); //Creating a list of numbers List list2=new ArrayList(); list2.add(21); list2.add(11); list2.add(51); list2.add(1); //Sorting the list Collections.sort(list2); //Traversing list through the for-each loop for(Integer number:list2) System.out.println(number); } } 

Výkon:

Apple Banana Grapes Mango Sorting numbers... 1 11 21 51 

Spôsoby iterácie prvkov kolekcie v jazyku Java

Existujú rôzne spôsoby prechodu cez prvky kolekcie:

  1. Pomocou rozhrania Iterator.
  2. Pre každú slučku.
  3. Prostredníctvom rozhrania ListIterator.
  4. Slučkou for.
  5. Metódou forEach().
  6. Metódou forEachRemaining().

Iterácia kolekcie cez zostávajúce spôsoby

Pozrime sa na príklad prechodu prvkov ArrayList inými spôsobmi

Názov súboru: ArrayList4.java

 import java.util.*; class ArrayList4{ public static void main(String args[]){ ArrayList list=new ArrayList();//Creating arraylist list.add(&apos;Ravi&apos;);//Adding object in arraylist list.add(&apos;Vijay&apos;); list.add(&apos;Ravi&apos;); list.add(&apos;Ajay&apos;); System.out.println(&apos;Traversing list through List Iterator:&apos;); //Here, element iterates in reverse order ListIterator list1=list.listIterator(list.size()); while(list1.hasPrevious()) { String str=list1.previous(); System.out.println(str); } System.out.println(&apos;Traversing list through for loop:&apos;); for(int i=0;i<list.size();i++) { system.out.println(list.get(i)); } system.out.println('traversing list through foreach() method:'); the method is a new feature, introduced in java 8. list.foreach(a->{ //Here, we are using lambda expression System.out.println(a); }); System.out.println(&apos;Traversing list through forEachRemaining() method:&apos;); Iterator itr=list.iterator(); itr.forEachRemaining(a-&gt; //Here, we are using lambda expression { System.out.println(a); }); } } </list.size();i++)>

Výkon:

Traversing list through List Iterator: Ajay Ravi Vijay Ravi Traversing list through for loop: Ravi Vijay Ravi Ajay Traversing list through forEach() method: Ravi Vijay Ravi Ajay Traversing list through forEachRemaining() method: Ravi Vijay Ravi Ajay 

Objekty triedy definované používateľom v Java ArrayList

Pozrime sa na príklad, kde ukladáme objekt triedy Študent do zoznamu polí.

manuálne testovanie

Názov súboru: ArrayList5.java

 class Student{ int rollno; String name; int age; Student(int rollno,String name,int age){ this.rollno=rollno; this.name=name; this.age=age; } } 

 import java.util.*; class ArrayList5{ public static void main(String args[]){ //Creating user-defined class objects Student s1=new Student(101,&apos;Sonoo&apos;,23); Student s2=new Student(102,&apos;Ravi&apos;,21); Student s2=new Student(103,&apos;Hanumat&apos;,25); //creating arraylist ArrayList al=new ArrayList(); al.add(s1);//adding Student class object al.add(s2); al.add(s3); //Getting Iterator Iterator itr=al.iterator(); //traversing elements of ArrayList object while(itr.hasNext()){ Student st=(Student)itr.next(); System.out.println(st.rollno+&apos; &apos;+st.name+&apos; &apos;+st.age); } } } 

Výkon:

 101 Sonoo 23 102 Ravi 21 103 Hanumat 25 

Príklad serializácie a deserializácie Java ArrayList

Pozrime sa na príklad serializácie objektu ArrayList a následného deserializácie.

Názov súboru: ArrayList6.java

 import java.io.*; import java.util.*; class ArrayList6 { public static void main(String [] args) { ArrayList al=new ArrayList(); al.add(&apos;Ravi&apos;); al.add(&apos;Vijay&apos;); al.add(&apos;Ajay&apos;); try { //Serialization FileOutputStream fos=new FileOutputStream(&apos;file&apos;); ObjectOutputStream oos=new ObjectOutputStream(fos); oos.writeObject(al); fos.close(); oos.close(); //Deserialization FileInputStream fis=new FileInputStream(&apos;file&apos;); ObjectInputStream ois=new ObjectInputStream(fis); ArrayList list=(ArrayList)ois.readObject(); System.out.println(list); }catch(Exception e) { System.out.println(e); } } } 

Výkon:

 [Ravi, Vijay, Ajay] 

Príklad Java ArrayList na pridanie prvkov

Tu vidíme rôzne spôsoby pridania prvku.

Názov súboru: ArrayList7.java

 import java.util.*; class ArrayList7{ public static void main(String args[]){ ArrayList al=new ArrayList(); System.out.println(&apos;Initial list of elements: &apos;+al); //Adding elements to the end of the list al.add(&apos;Ravi&apos;); al.add(&apos;Vijay&apos;); al.add(&apos;Ajay&apos;); System.out.println(&apos;After invoking add(E e) method: &apos;+al); //Adding an element at the specific position al.add(1, &apos;Gaurav&apos;); System.out.println(&apos;After invoking add(int index, E element) method: &apos;+al); ArrayList al2=new ArrayList(); al2.add(&apos;Sonoo&apos;); al2.add(&apos;Hanumat&apos;); //Adding second list elements to the first list al.addAll(al2); System.out.println(&apos;After invoking addAll(Collection c) method: &apos;+al); ArrayList al3=new ArrayList(); al3.add(&apos;John&apos;); al3.add(&apos;Rahul&apos;); //Adding second list elements to the first list at specific position al.addAll(1, al3); System.out.println(&apos;After invoking addAll(int index, Collection c) method: &apos;+al); } } 

Výkon:

Initial list of elements: [] After invoking add(E e) method: [Ravi, Vijay, Ajay] After invoking add(int index, E element) method: [Ravi, Gaurav, Vijay, Ajay] After invoking addAll(Collection c) method: [Ravi, Gaurav, Vijay, Ajay, Sonoo, Hanumat] After invoking addAll(int index, Collection c) method: [Ravi, John, Rahul, Gaurav, Vijay, Ajay, Sonoo, Hanumat] 

Príklad Java ArrayList na odstránenie prvkov

Tu vidíme rôzne spôsoby odstránenia prvku.

Názov súboru: ArrayList8.java

 import java.util.*; class ArrayList8 { public static void main(String [] args) { ArrayList al=new ArrayList(); al.add(&apos;Ravi&apos;); al.add(&apos;Vijay&apos;); al.add(&apos;Ajay&apos;); al.add(&apos;Anuj&apos;); al.add(&apos;Gaurav&apos;); System.out.println(&apos;An initial list of elements: &apos;+al); //Removing specific element from arraylist al.remove(&apos;Vijay&apos;); System.out.println(&apos;After invoking remove(object) method: &apos;+al); //Removing element on the basis of specific position al.remove(0); System.out.println(&apos;After invoking remove(index) method: &apos;+al); //Creating another arraylist ArrayList al2=new ArrayList(); al2.add(&apos;Ravi&apos;); al2.add(&apos;Hanumat&apos;); //Adding new elements to arraylist al.addAll(al2); System.out.println(&apos;Updated list : &apos;+al); //Removing all the new elements from arraylist al.removeAll(al2); System.out.println(&apos;After invoking removeAll() method: &apos;+al); //Removing elements on the basis of specified condition al.removeIf(str -&gt; str.contains(&apos;Ajay&apos;)); //Here, we are using Lambda expression System.out.println(&apos;After invoking removeIf() method: &apos;+al); //Removing all the elements available in the list al.clear(); System.out.println(&apos;After invoking clear() method: &apos;+al); } } 

Výkon:

An initial list of elements: [Ravi, Vijay, Ajay, Anuj, Gaurav] After invoking remove(object) method: [Ravi, Ajay, Anuj, Gaurav] After invoking remove(index) method: [Ajay, Anuj, Gaurav] Updated list : [Ajay, Anuj, Gaurav, Ravi, Hanumat] After invoking removeAll() method: [Ajay, Anuj, Gaurav] After invoking removeIf() method: [Anuj, Gaurav] After invoking clear() method: [] 

Príklad Java ArrayList metódy keepAll().

Názov súboru: ArrayList9.java

 import java.util.*; class ArrayList9{ public static void main(String args[]){ ArrayList al=new ArrayList(); al.add(&apos;Ravi&apos;); al.add(&apos;Vijay&apos;); al.add(&apos;Ajay&apos;); ArrayList al2=new ArrayList(); al2.add(&apos;Ravi&apos;); al2.add(&apos;Hanumat&apos;); al.retainAll(al2); System.out.println(&apos;iterating the elements after retaining the elements of al2&apos;); Iterator itr=al.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } } 

Výkon:

 iterating the elements after retaining the elements of al2 Ravi 

Príklad Java ArrayList metódy isEmpty().

Názov súboru: ArrayList4.java

 import java.util.*; class ArrayList10{ public static void main(String [] args) { ArrayList al=new ArrayList(); System.out.println(&apos;Is ArrayList Empty: &apos;+al.isEmpty()); al.add(&apos;Ravi&apos;); al.add(&apos;Vijay&apos;); al.add(&apos;Ajay&apos;); System.out.println(&apos;After Insertion&apos;); System.out.println(&apos;Is ArrayList Empty: &apos;+al.isEmpty()); } } 

Výkon:

Is ArrayList Empty: true After Insertion Is ArrayList Empty: false 

Java ArrayList Príklad: Kniha

Pozrime sa na príklad ArrayList, kde pridávame knihy do zoznamu a tlačíme všetky knihy.

Názov súboru: ArrayListExample20.java

 import java.util.*; class Book { int id; String name,author,publisher; int quantity; public Book(int id, String name, String author, String publisher, int quantity) { this.id = id; this.name = name; this.author = author; this.publisher = publisher; this.quantity = quantity; } } public class ArrayListExample20 { public static void main(String[] args) { //Creating list of Books List list=new ArrayList(); //Creating Books Book b1=new Book(101,&apos;Let us C&apos;,&apos;Yashwant Kanetkar&apos;,&apos;BPB&apos;,8); Book b2=new Book(102,&apos;Data Communications and Networking&apos;,&apos;Forouzan&apos;,&apos;Mc Graw Hill&apos;,4); Book b3=new Book(103,&apos;Operating System&apos;,&apos;Galvin&apos;,&apos;Wiley&apos;,6); //Adding Books to list list.add(b1); list.add(b2); list.add(b3); //Traversing list for(Book b:list){ System.out.println(b.id+&apos; &apos;+b.name+&apos; &apos;+b.author+&apos; &apos;+b.publisher+&apos; &apos;+b.quantity); } } } 
Vyskúšajte to

Výkon:

101 Let us C Yashwant Kanetkar BPB 8 102 Data Communications and Networking Forouzan Mc Graw Hill 4 103 Operating System Galvin Wiley 6 

Veľkosť a kapacita ArrayList

Veľkosť a kapacita zoznamu polí sú dva pojmy, ktoré začiatočníkov považujú za mätúce. Poďme to pochopiť v tejto časti pomocou niekoľkých príkladov. Zvážte nasledujúci útržok kódu.

Názov súboru: SizeCapacity.java

 import java.util.*; public class SizeCapacity { public static void main(String[] args) throws Exception { ArrayList al = new ArrayList(); System.out.println(&apos;The size of the array is: &apos; + al.size()); } } 

Výkon:

 The size of the array is: 0 

Vysvetlenie: Výstup dáva zmysel, keďže sme so zoznamom polí nič nerobili. Teraz sledujte nasledujúci program.

Názov súboru: VeľkosťKapacita1.java

 import java.util.*; public class SizeCapacity1 { public static void main(String[] args) throws Exception { ArrayList al = new ArrayList(10); System.out.println(&apos;The size of the array is: &apos; + al.size()); } } 

Výkon:

 The size of the array is: 0 

Vysvetlenie: Vidíme, že veľkosť je stále 0 a dôvodom je, že číslo 10 predstavuje kapacitu bez veľkosti. V skutočnosti veľkosť predstavuje celkový počet prvkov prítomných v poli. Keďže sme nepridali žiadny prvok, veľkosť zoznamu polí je v oboch programoch nulová.

Kapacita predstavuje celkový počet prvkov, ktoré môže zoznam polí obsahovať. Preto je kapacita zoznamu polí vždy väčšia alebo rovná veľkosti zoznamu polí. Keď do zoznamu polí pridáme prvok, skontroluje, či sa veľkosť zoznamu polí zhoduje s kapacitou alebo nie. Ak áno, kapacita zoznamu polí sa zvýši. Takže vo vyššie uvedenom príklade bude kapacita 10, kým sa do zoznamu nepridá 10 prvkov. Keď k tomu pridáme 11thprvok, kapacita sa zvyšuje. Všimnite si, že v oboch príkladoch je kapacita zoznamu polí 10. V prvom prípade je kapacita 10, pretože predvolená kapacita zoznamu polí je 10. V druhom prípade sme výslovne uviedli, že kapacita poľa zoznam je 10.

Poznámka: Neexistuje žiadna štandardná metóda, ako zistiť, ako sa zvyšuje kapacita v zozname polí. V skutočnosti sa spôsob zvyšovania kapacity líši od jednej verzie GDK k druhej. Preto je potrebné skontrolovať spôsob implementácie kódu na zvýšenie kapacity v GDK. V triede ArrayList nie je žiadna vopred definovaná metóda, ktorá vracia kapacitu zoznamu polí. Pre lepšie pochopenie preto použite metódu capacity() triedy Vector. Logika veľkosti a kapacity je rovnaká v triede ArrayList a triede Vector.

Súvisiace témy

Ako triediť ArrayList v Jave

Rozdiel medzi Array a ArrayList

Kedy použiť ArrayList a LinkedList v jazyku Java

Rozdiel medzi ArrayList a LinkedList

Rozdiel medzi ArrayList a Vector

Ako porovnať dva ArrayList v Jave

Ako obrátiť ArrayList v Jave

Kedy použiť ArrayList a LinkedList v jazyku Java

Ako urobiť ArrayList iba na čítanie

Rozdiel medzi dĺžkou poľa a veľkosťou () ArrayList v Jave

Ako synchronizovať ArrayList v Jave

Ako previesť ArrayList na Array a Array na ArrayList v jave

Array vs ArrayList v jazyku Java

ukazovatele v c

Ako triediť Java ArrayList v zostupnom poradí

Ako odstrániť duplikáty z ArrayList v jazyku Java