Jáva ArrayList třída používá a dynamický pole pro uložení prvků. Je to jako pole, ale existuje bez omezení velikosti . Prvky můžeme kdykoli přidat nebo odebrat. Je tedy mnohem flexibilnější než tradiční pole. Nachází se v java.util balík. Je to jako Vector v C++.
ArrayList v Javě může mít také duplicitní prvky. Implementuje rozhraní Seznam, takže zde můžeme použít všechny metody rozhraní Seznam. ArrayList udržuje objednávku vložení interně.
Zdědí třídu AbstractList a implementuje Rozhraní seznamu .
Důležité body o třídě Java ArrayList jsou:
- Třída Java ArrayList může obsahovat duplicitní prvky.
- Třída Java ArrayList udržuje pořadí vložení.
- Třída Java ArrayList není synchronizované .
- Java ArrayList umožňuje náhodný přístup, protože pole funguje na základě indexu.
- V ArrayList je manipulace o něco pomalejší než LinkedList v Javě, protože pokud je ze seznamu polí odstraněn jakýkoli prvek, musí dojít k velkému posunu.
- Nemůžeme vytvořit seznam polí primitivních typů, jako je int, float, char atd. V takových případech je nutné použít požadovanou obalovou třídu. Například:
ArrayList al = ArrayList(); // does not work ArrayList al = new ArrayList(); // works fine
- Java ArrayList se inicializuje podle velikosti. Velikost je v seznamu polí dynamická, která se liší podle prvků, které se přidávají nebo odebírají ze seznamu.
Hierarchie třídy ArrayList
Jak ukazuje výše uvedený diagram, třída Java ArrayList rozšiřuje třídu AbstractList, která implementuje rozhraní List. Rozhraní Seznam rozšiřuje Sbírka a Iterovatelná rozhraní v hierarchickém pořadí.
Deklarace třídy ArrayList
Podívejme se na deklaraci třídy java.util.ArrayList.
public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, Serializable
Konstruktéři ArrayList
Konstruktér | Popis |
---|---|
ArrayList() | Používá se k vytvoření prázdného seznamu polí. |
ArrayList (kolekce c) | Používá se k vytvoření seznamu polí, který je inicializován prvky kolekce c. |
ArrayList (kapacita int) | Používá se k vytvoření seznamu polí, který má zadanou počáteční kapacitu. |
Metody ArrayList
Metoda | Popis |
---|---|
prázdnota přidat (index int, prvek E) | Používá se k vložení zadaného prvku na zadané místo v seznamu. |
booleovský přidat (a a) | Používá se k připojení zadaného prvku na konec seznamu. |
boolean addAll (kolekce c) | Používá se k připojení všech prvků v zadané kolekci na konec tohoto seznamu v pořadí, v jakém jsou vráceny iterátorem zadané kolekce. |
boolean addAll (index int, kolekce c) | Používá se k připojení všech prvků v zadané kolekci počínaje zadanou pozicí seznamu. |
void clear () | Používá se k odstranění všech prvků z tohoto seznamu. |
void secureCapacity (int requiredCapacity) | Používá se ke zvýšení kapacity instance ArrayList. |
E get (int index) | Používá se k načtení prvku z konkrétní pozice v seznamu. |
boolean isEmpty() | Vrací hodnotu true, pokud je seznam prázdný, v opačném případě vrací hodnotu false. |
Iterátor() | |
listIterator() | |
int lastIndexOf(Object o) | Používá se k vrácení indexu v tomto seznamu posledního výskytu zadaného prvku nebo -1, pokud seznam tento prvek neobsahuje. |
Object[] toArray() | Používá se k vrácení pole obsahujícího všechny prvky v tomto seznamu ve správném pořadí. |
T[] toArray(T[] a) | Používá se k vrácení pole obsahujícího všechny prvky v tomto seznamu ve správném pořadí. |
Object clone() | Používá se k vrácení mělké kopie ArrayList. |
boolean obsahuje (Objekt o) | Vrací hodnotu true, pokud seznam obsahuje zadaný prvek. |
int indexOf(Objekt o) | Používá se k vrácení indexu v tomto seznamu prvního výskytu zadaného prvku nebo -1, pokud seznam tento prvek neobsahuje. |
E odstranit (int index) | Používá se k odstranění prvku přítomného na zadané pozici v seznamu. |
booleovské odstranění (objekt o) | Používá se k odstranění prvního výskytu zadaného prvku. |
boolean removeAll (kolekce c) | Používá se k odstranění všech prvků ze seznamu. |
boolean removeIf (filtr predikátu) | Slouží k odstranění všech prvků ze seznamu, které splňují daný predikát. |
protected void removeRange (int fromIndex, int toIndex) | Používá se k odstranění všech prvků ležících v daném rozsahu. |
void nahradit vše (operátor UnaryOperator) | Používá se k nahrazení všech prvků ze seznamu zadaným prvkem. |
void keepAll (kolekce c) | Používá se k zachování všech prvků v seznamu, které jsou přítomny v zadané kolekci. |
E sada (int index, E prvek) | Používá se k nahrazení zadaného prvku v seznamu přítomného na zadané pozici. |
void sort (Comparator c) | Slouží k řazení prvků seznamu na základě zadaného komparátoru. |
Spliterator spliterator() | Používá se k vytvoření rozdělovače nad prvky v seznamu. |
Seznam podseznam (int fromIndex, int toIndex) | Slouží k načtení všech prvků, které leží v daném rozsahu. |
int size() | Používá se k vrácení počtu prvků přítomných v seznamu. |
void trimToSize() | Používá se k oříznutí kapacity této instance ArrayList na aktuální velikost seznamu. |
Java Non-generic vs. Generic Collection
Před JDK 1.5 nebyl rámec pro kolekce Java generický. Od 1.5 je to generické.
Nová generická kolekce Java vám umožňuje mít v kolekci pouze jeden typ objektu. Nyní je typově bezpečný, takže přetypování není vyžadováno za běhu.
Podívejme se na starý negenerický příklad vytvoření kolekce Java.
ArrayList list=new ArrayList();//creating old non-generic arraylist
Podívejme se na nový obecný příklad vytváření kolekce java.
ArrayList list=new ArrayList();//creating new generic arraylist
V obecné kolekci specifikujeme typ v úhlových závorkách. Nyní je ArrayList nucen mít v sobě pouze zadaný typ objektu. Pokud se pokusíte přidat jiný typ objektu, zobrazí se a chyba při kompilaci .
Pro více informací o generikách Java klikněte sem Výuka Java Generics .
Příklad Java ArrayList
Název souboru: 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); } }Otestujte to hned
Výstup:
[Mango, Apple, Banana, Grapes]
Iterace ArrayList pomocí Iteratoru
Podívejme se na příklad procházení prvků ArrayList pomocí rozhraní Iterator.
Název souboru: ArrayListExample2.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 } } }Otestujte to hned
Výstup:
Mango Apple Banana Grapes
Iterace ArrayList pomocí smyčky For-each
Podívejme se na příklad procházení prvků ArrayList pomocí smyčky for-each
Název souboru: 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ýstup:
Otestujte to hnedMango Apple Banana Grapes
Získejte a nastavte ArrayList
The metoda get(). vrátí prvek na zadaném indexu, zatímco metoda set(). změní prvek.
Název souboru: 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); } }Otestujte to hned
Výstup:
Returning element: Apple Mango Dates Banana Grapes
Jak třídit ArrayList
The java.util balíček poskytuje třídu utility Sbírky , který má statickou metodu sort(). Za použití Collections.sort() metodou, můžeme ArrayList snadno seřadit.
Název souboru: 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ýstup:
Apple Banana Grapes Mango Sorting numbers... 1 11 21 51
Způsoby iterace prvků kolekce v Javě
Prvky kolekce lze procházet různými způsoby:
- Prostřednictvím rozhraní iterátoru.
- Pro každou smyčku.
- Prostřednictvím rozhraní ListIterator.
- Smyčkou for.
- Metodou forEach().
- Metodou forEachRemaining().
Iterace kolekce zbývajícími způsoby
Podívejme se na příklad procházení prvků ArrayList jinými způsoby
Název souboru: ArrayList4.java
import java.util.*; class ArrayList4{ public static void main(String args[]){ ArrayList list=new ArrayList();//Creating arraylist list.add('Ravi');//Adding object in arraylist list.add('Vijay'); list.add('Ravi'); list.add('Ajay'); System.out.println('Traversing list through List Iterator:'); //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('Traversing list through for loop:'); 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('Traversing list through forEachRemaining() method:'); Iterator itr=list.iterator(); itr.forEachRemaining(a-> //Here, we are using lambda expression { System.out.println(a); }); } } </list.size();i++)>
Výstup:
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 třídy definované uživatelem v Java ArrayList
Podívejme se na příklad, kdy ukládáme objekt třídy Student do seznamu polí.
pro smyčky java
Název souboru: 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,'Sonoo',23); Student s2=new Student(102,'Ravi',21); Student s2=new Student(103,'Hanumat',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+' '+st.name+' '+st.age); } } }
Výstup:
101 Sonoo 23 102 Ravi 21 103 Hanumat 25
Příklad serializace a deserializace Java ArrayList
Podívejme se na příklad serializace objektu ArrayList a následné deserializace.
Název souboru: ArrayList6.java
import java.io.*; import java.util.*; class ArrayList6 { public static void main(String [] args) { ArrayList al=new ArrayList(); al.add('Ravi'); al.add('Vijay'); al.add('Ajay'); try { //Serialization FileOutputStream fos=new FileOutputStream('file'); ObjectOutputStream oos=new ObjectOutputStream(fos); oos.writeObject(al); fos.close(); oos.close(); //Deserialization FileInputStream fis=new FileInputStream('file'); ObjectInputStream ois=new ObjectInputStream(fis); ArrayList list=(ArrayList)ois.readObject(); System.out.println(list); }catch(Exception e) { System.out.println(e); } } }
Výstup:
[Ravi, Vijay, Ajay]
Příklad Java ArrayList pro přidání prvků
Zde vidíme různé způsoby, jak přidat prvek.
Název souboru: ArrayList7.java
import java.util.*; class ArrayList7{ public static void main(String args[]){ ArrayList al=new ArrayList(); System.out.println('Initial list of elements: '+al); //Adding elements to the end of the list al.add('Ravi'); al.add('Vijay'); al.add('Ajay'); System.out.println('After invoking add(E e) method: '+al); //Adding an element at the specific position al.add(1, 'Gaurav'); System.out.println('After invoking add(int index, E element) method: '+al); ArrayList al2=new ArrayList(); al2.add('Sonoo'); al2.add('Hanumat'); //Adding second list elements to the first list al.addAll(al2); System.out.println('After invoking addAll(Collection c) method: '+al); ArrayList al3=new ArrayList(); al3.add('John'); al3.add('Rahul'); //Adding second list elements to the first list at specific position al.addAll(1, al3); System.out.println('After invoking addAll(int index, Collection c) method: '+al); } }
Výstup:
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]
Příklad Java ArrayList pro odstranění prvků
Zde vidíme různé způsoby odstranění prvku.
Název souboru: ArrayList8.java
import java.util.*; class ArrayList8 { public static void main(String [] args) { ArrayList al=new ArrayList(); al.add('Ravi'); al.add('Vijay'); al.add('Ajay'); al.add('Anuj'); al.add('Gaurav'); System.out.println('An initial list of elements: '+al); //Removing specific element from arraylist al.remove('Vijay'); System.out.println('After invoking remove(object) method: '+al); //Removing element on the basis of specific position al.remove(0); System.out.println('After invoking remove(index) method: '+al); //Creating another arraylist ArrayList al2=new ArrayList(); al2.add('Ravi'); al2.add('Hanumat'); //Adding new elements to arraylist al.addAll(al2); System.out.println('Updated list : '+al); //Removing all the new elements from arraylist al.removeAll(al2); System.out.println('After invoking removeAll() method: '+al); //Removing elements on the basis of specified condition al.removeIf(str -> str.contains('Ajay')); //Here, we are using Lambda expression System.out.println('After invoking removeIf() method: '+al); //Removing all the elements available in the list al.clear(); System.out.println('After invoking clear() method: '+al); } }
Výstup:
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: []
Příklad Java ArrayList metody keepAll().
Název souboru: ArrayList9.java
import java.util.*; class ArrayList9{ public static void main(String args[]){ ArrayList al=new ArrayList(); al.add('Ravi'); al.add('Vijay'); al.add('Ajay'); ArrayList al2=new ArrayList(); al2.add('Ravi'); al2.add('Hanumat'); al.retainAll(al2); System.out.println('iterating the elements after retaining the elements of al2'); Iterator itr=al.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } } }
Výstup:
iterating the elements after retaining the elements of al2 Ravi
Příklad Java ArrayList metody isEmpty().
Název souboru: ArrayList4.java
import java.util.*; class ArrayList10{ public static void main(String [] args) { ArrayList al=new ArrayList(); System.out.println('Is ArrayList Empty: '+al.isEmpty()); al.add('Ravi'); al.add('Vijay'); al.add('Ajay'); System.out.println('After Insertion'); System.out.println('Is ArrayList Empty: '+al.isEmpty()); } }
Výstup:
Is ArrayList Empty: true After Insertion Is ArrayList Empty: false
Java ArrayList Příklad: Book
Podívejme se na příklad ArrayList, kde přidáváme knihy do seznamu a tiskneme všechny knihy.
Název souboru: 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,'Let us C','Yashwant Kanetkar','BPB',8); Book b2=new Book(102,'Data Communications and Networking','Forouzan','Mc Graw Hill',4); Book b3=new Book(103,'Operating System','Galvin','Wiley',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+' '+b.name+' '+b.author+' '+b.publisher+' '+b.quantity); } } }Otestujte to hned
Výstup:
101 Let us C Yashwant Kanetkar BPB 8 102 Data Communications and Networking Forouzan Mc Graw Hill 4 103 Operating System Galvin Wiley 6
Velikost a kapacita ArrayList
Velikost a kapacita seznamu polí jsou dva pojmy, které začátečníky považují za matoucí. Pojďme to pochopit v této části pomocí několika příkladů. Zvažte následující fragment kódu.
Název souboru: SizeCapacity.java
import java.util.*; public class SizeCapacity { public static void main(String[] args) throws Exception { ArrayList al = new ArrayList(); System.out.println('The size of the array is: ' + al.size()); } }
Výstup:
The size of the array is: 0
Vysvětlení: Výstup dává smysl, protože jsme se seznamem polí nic neudělali. Nyní sledujte následující program.
Název souboru: VelikostKapacita1.java
import java.util.*; public class SizeCapacity1 { public static void main(String[] args) throws Exception { ArrayList al = new ArrayList(10); System.out.println('The size of the array is: ' + al.size()); } }
Výstup:
The size of the array is: 0
Vysvětlení: Vidíme, že velikost je stále 0 a důvodem je, že číslo 10 představuje kapacitu bez velikosti. Ve skutečnosti velikost představuje celkový počet prvků přítomných v poli. Protože jsme nepřidali žádný prvek, velikost seznamu polí je v obou programech nulová.
Kapacita představuje celkový počet prvků, které může seznam polí obsahovat. Kapacita seznamu polí je proto vždy větší nebo rovna velikosti seznamu polí. Když přidáme prvek do seznamu polí, zkontroluje, zda se velikost seznamu polí rovnala kapacitě nebo ne. Pokud ano, zvýší se kapacita seznamu polí. Takže ve výše uvedeném příkladu bude kapacita 10, dokud nebude do seznamu přidáno 10 prvků. Když k tomu přidáme 11čtprvek, kapacita se zvyšuje. Všimněte si, že v obou příkladech je kapacita seznamu polí 10. V prvním případě je kapacita 10, protože výchozí kapacita seznamu polí je 10. Ve druhém případě jsme výslovně zmínili, že kapacita pole seznam je 10.
Poznámka: Neexistuje žádná standardní metoda, jak zjistit, jak se zvyšuje kapacita v seznamu polí. Ve skutečnosti se způsob zvýšení kapacity u jednotlivých verzí GDK liší. Proto je nutné zkontrolovat způsob implementace kódu pro zvýšení kapacity v GDK. Ve třídě ArrayList není žádná předdefinovaná metoda, která vrací kapacitu seznamu polí. Pro lepší pochopení proto použijte metodu capacity() třídy Vector. Logika velikosti a kapacity je stejná ve třídě ArrayList a třídě Vector.
Související témata
Kdy použít ArrayList a LinkedList v Javě
Rozdíl mezi ArrayList a LinkedList
Rozdíl mezi ArrayList a Vector
Jak porovnat dva ArrayList v Javě
Jak obrátit ArrayList v Javě
Kdy použít ArrayList a LinkedList v Javě
Jak nastavit ArrayList pouze pro čtení
Rozdíl mezi délkou pole a size() ArrayList v Javě
Jak synchronizovat ArrayList v Javě
Jak převést ArrayList na Array a Array na ArrayList v Javě
Array vs ArrayList v Javě
Jak seřadit Java ArrayList v sestupném pořadí
Jak odstranit duplikáty z ArrayList v Javě
mysql vytvořit uživatele