logo

Java ArrayList

Jerarquia de classes de Java ArrayList

Java ArrayList la classe utilitza a dinàmic matriu per emmagatzemar els elements. És com una matriu, però n'hi ha sense límit de mida . Podem afegir o eliminar elements en qualsevol moment. Per tant, és molt més flexible que la matriu tradicional. Es troba a la java.util paquet. És com el Vector en C++.

La ArrayList a Java també pot tenir els elements duplicats. Implementa la interfície List perquè puguem utilitzar tots els mètodes de la interfície List aquí. ArrayList manté l'ordre d'inserció internament.

exemple de llista en java

Hereta la classe AbstractList i implementa Interfície de llista .

Els punts importants sobre la classe Java ArrayList són:

  • La classe Java ArrayList pot contenir elements duplicats.
  • La classe Java ArrayList manté l'ordre d'inserció.
  • La classe Java ArrayList no és sincronitzat .
  • Java ArrayList permet l'accés aleatori perquè la matriu funciona sobre una base d'índex.
  • A ArrayList, la manipulació és una mica més lenta que la LinkedList a Java perquè s'han de produir molts canvis si s'elimina algun element de la llista de matrius.
  • No podem crear una llista de matrius dels tipus primitius, com ara int, float, char, etc. En aquests casos cal utilitzar la classe d'embolcall requerida. Per exemple:
 ArrayList al = ArrayList(); // does not work ArrayList al = new ArrayList(); // works fine 
  • Java ArrayList s'inicia per la mida. La mida és dinàmica a la llista de matrius, que varia segons els elements que s'afegeixen o s'eliminen de la llista.

Jerarquia de la classe ArrayList

Com es mostra al diagrama anterior, la classe Java ArrayList amplia la classe AbstractList que implementa la interfície List. La interfície de llista amplia el Col · lecció i interfícies iterables en ordre jeràrquic.

Declaració de classe ArrayList

Vegem la declaració de la classe java.util.ArrayList.

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

Constructors de ArrayList

Constructor Descripció
ArrayList() S'utilitza per crear una llista de matrius buides.
ArrayList(Col·lecció c) S'utilitza per construir una llista de matrius que s'inicialitza amb els elements de la col·lecció c.
ArrayList (capacitat int) S'utilitza per crear una llista de matrius que tingui la capacitat inicial especificada.

Mètodes de ArrayList

Mètode Descripció
buit afegir (índex int, element E) S'utilitza per inserir l'element especificat a la posició especificada en una llista.
booleà afegir (I i) S'utilitza per afegir l'element especificat al final d'una llista.
booleà addAll (Col·lecció c) S'utilitza per afegir tots els elements de la col·lecció especificada al final d'aquesta llista, en l'ordre en què són retornats per l'iterador de la col·lecció especificada.
booleà addAll (índex int, col·lecció c) S'utilitza per afegir tots els elements de la col·lecció especificada, començant per la posició especificada de la llista.
buit clar () S'utilitza per eliminar tots els elements d'aquesta llista.
void ensureCapacity(int requiredCapacity) S'utilitza per millorar la capacitat d'una instància ArrayList.
E get(índex int) S'utilitza per obtenir l'element des de la posició concreta de la llista.
booleà és buit () Retorna true si la llista està buida, en cas contrari és fals.
Iterador()
listIterator()
int lastIndexOf(Objecte o) S'utilitza per retornar l'índex en aquesta llista de la darrera ocurrència de l'element especificat, o -1 si la llista no conté aquest element.
Objecte[] toArray() S'utilitza per retornar una matriu que conté tots els elements d'aquesta llista en l'ordre correcte.
T[] toArray(T[] a) S'utilitza per retornar una matriu que conté tots els elements d'aquesta llista en l'ordre correcte.
Clon d'objecte() S'utilitza per retornar una còpia superficial d'una ArrayList.
booleà conté (Objecte o) Retorna true si la llista conté l'element especificat.
int indexOf(Objecte o) S'utilitza per retornar l'índex en aquesta llista de la primera ocurrència de l'element especificat, o -1 si la llista no conté aquest element.
E elimina (índex int) S'utilitza per eliminar l'element present a la posició especificada de la llista.
eliminació booleana (objecte o) S'utilitza per eliminar la primera ocurrència de l'element especificat.
booleà removeAll (Col·lecció c) S'utilitza per eliminar tots els elements de la llista.
booleà removeIf (filtre de predicats) S'utilitza per eliminar tots els elements de la llista que compleixen el predicat donat.
protegit void removeRange (int fromIndex, int toIndex) S'utilitza per eliminar tots els elements que es troben dins de l'interval donat.
void replaceAll (operador UnaryOperator) S'utilitza per substituir tots els elements de la llista amb l'element especificat.
void retainAll (Col·lecció c) S'utilitza per retenir tots els elements de la llista que estan presents a la col·lecció especificada.
Conjunt E (índex int, element E) S'utilitza per substituir l'element especificat a la llista, present a la posició especificada.
void sort (comparador c) S'utilitza per ordenar els elements de la llista en funció del comparador especificat.
Divisor divisor divisor () S'utilitza per crear un divisor sobre els elements d'una llista.
Llista subLlista (int de l'índex, int a l'índex) S'utilitza per obtenir tots els elements que es troben dins de l'interval donat.
mida int () S'utilitza per retornar el nombre d'elements presents a la llista.
void trimToSize() S'utilitza per retallar la capacitat d'aquesta instància ArrayList perquè sigui la mida actual de la llista.

Java no genèric vs. Col·lecció genèrica

El marc de col·lecció de Java no era genèric abans de JDK 1.5. Des de l'1.5, és genèric.

La nova col·lecció genèrica de Java us permet tenir només un tipus d'objecte en una col·lecció. Ara és segur per a tipus, per la qual cosa no cal escriure tipus en temps d'execució.

Vegem l'antic exemple no genèric de creació d'una col·lecció Java.

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

Vegem el nou exemple genèric de creació d'una col·lecció Java.

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

En una col·lecció genèrica, especifiquem el tipus entre claus angulars. Ara ArrayList està obligat a tenir l'únic tipus d'objecte especificat. Si intentes afegir un altre tipus d'objecte, dóna a error en temps de compilació .

Per obtenir més informació sobre els genèrics de Java, feu clic aquí Tutorial de genèrics Java .

Exemple de Java ArrayList

Nom de l'arxiu: 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); } } 
Prova-ho ara

Sortida:

[Mango, Apple, Banana, Grapes] 

Iterant ArrayList amb Iterator

Vegem un exemple per recórrer elements ArrayList mitjançant la interfície Iterator.

Nom de l'arxiu: 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 } } } 
Prova-ho ara

Sortida:

Mango Apple Banana Grapes 

Iterant ArrayList utilitzant el bucle For-each

Vegem un exemple per recórrer els elements ArrayList utilitzant el bucle for-each

Nom de l'arxiu: 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); } } 

Sortida:

Prova-ho ara
Mango Apple Banana Grapes 

Obtenir i establir ArrayList

El mètode get(). retorna l'element a l'índex especificat, mentre que el mètode set(). canvia l'element.

tipus de dades de referència en java

Nom de l'arxiu: 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); } } 
Prova-ho ara

Sortida:

Returning element: Apple Mango Dates Banana Grapes 

Com ordenar ArrayList

El java.util paquet proporciona una classe d'utilitat Col·leccions , que té el mètode estàtic sort(). Utilitzant el Collections.sort() mètode, podem ordenar fàcilment la ArrayList.

Nom de l'arxiu: 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); } } 

Sortida:

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

Maneres d'iterar els elements de la col·lecció en Java

Hi ha diverses maneres de recórrer els elements de la col·lecció:

  1. Per interfície d'iterador.
  2. Per for-each bucle.
  3. Per interfície ListIterator.
  4. Per bucle for.
  5. Amb el mètode forEach().
  6. Mitjançant el mètode forEachRemaining().

Col·lecció iterant a través de les vies restants

Vegem un exemple per recórrer els elements ArrayList per altres maneres

Nom de l'arxiu: 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++)>

Sortida:

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 

Objectes de classe definits per l'usuari a Java ArrayList

Vegem un exemple on estem emmagatzemant un objecte de classe Student en una llista de matrius.

Nom de l'arxiu: 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); } } } 

Sortida:

 101 Sonoo 23 102 Ravi 21 103 Hanumat 25 

Exemple de serialització i deserialització de Java ArrayList

Vegem un exemple per serialitzar un objecte ArrayList i després deserialitzar-lo.

Nom de l'arxiu: 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); } } } 

Sortida:

 [Ravi, Vijay, Ajay] 

Exemple de Java ArrayList per afegir elements

Aquí, veiem diferents maneres d'afegir un element.

Nom de l'arxiu: ArrayList7.java

canviar el nom del directori a linux
 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); } } 

Sortida:

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] 

Exemple de Java ArrayList per eliminar elements

Aquí, veiem diferents maneres d'eliminar un element.

Nom de l'arxiu: 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); } } 

Sortida:

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: [] 

Exemple de Java ArrayList del mètode retainAll().

Nom de l'arxiu: 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()); } } } 

Sortida:

 iterating the elements after retaining the elements of al2 Ravi 

Exemple de Java ArrayList del mètode isEmpty().

Nom de l'arxiu: 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()); } } 

Sortida:

índex java de
Is ArrayList Empty: true After Insertion Is ArrayList Empty: false 

Exemple Java ArrayList: llibre

Vegem un exemple de ArrayList on estem afegint llibres a la llista i imprimint tots els llibres.

Nom de l'arxiu: 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); } } } 
Prova-ho ara

Sortida:

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

Mida i capacitat d'una ArrayList

La mida i la capacitat d'una llista de matrius són els dos termes que els principiants troben confusos. Entenem-ho en aquesta secció amb l'ajuda d'alguns exemples. Considereu el fragment de codi següent.

Nom de l'arxiu: 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()); } } 

Sortida:

 The size of the array is: 0 

Explicació: La sortida té sentit ja que no hem fet res amb la llista de matrius. Ara observeu el següent programa.

Nom de l'arxiu: SizeCapacity1.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()); } } 

Sortida:

 The size of the array is: 0 

Explicació: Veiem que la mida encara és 0, i el motiu d'això és que el número 10 representa la capacitat i la mida. De fet, la mida representa el nombre total d'elements presents a la matriu. Com que no hem afegit cap element, per tant, la mida de la llista de matrius és zero en ambdós programes.

La capacitat representa el nombre total d'elements que pot contenir la llista de matrius. Per tant, la capacitat d'una llista de matrius és sempre superior o igual a la mida de la llista de matrius. Quan afegim un element a la llista de matrius, comprova si la mida de la llista de matrius ha arribat a ser igual a la capacitat o no. Si és així, la capacitat de la llista de matrius augmenta. Així, a l'exemple anterior, la capacitat serà de 10 fins que s'afegeixin 10 elements a la llista. Quan afegim l'11thelement, la capacitat augmenta. Tingueu en compte que en ambdós exemples, la capacitat de la llista de matrius és 10. En el primer cas, la capacitat és 10 perquè la capacitat per defecte de la llista de matrius és 10. En el segon cas, hem esmentat explícitament que la capacitat de la matriu la llista és 10.

Nota: no hi ha cap mètode estàndard per saber com augmenta la capacitat a la llista de matrius. De fet, la manera com augmenta la capacitat varia d'una versió de GDK a l'altra. Per tant, cal comprovar com s'implementa el codi d'augment de capacitat al GDK. No hi ha cap mètode predefinit a la classe ArrayList que retorni la capacitat de la llista de matrius. Per tant, per a una millor comprensió, utilitzeu el mètode capacitat() de la classe Vector. La lògica de la mida i la capacitat és la mateixa a la classe ArrayList i a la classe Vector.

Temes relacionats

Com ordenar ArrayList a Java

Diferència entre Array i ArrayList

Quan utilitzar ArrayList i LinkedList a Java

Diferència entre ArrayList i LinkedList

Diferència entre ArrayList i Vector

Com comparar dues ArrayList a Java

Com invertir ArrayList a Java

Quan utilitzar ArrayList i LinkedList a Java

com es va inventar l'escola

Com fer que ArrayList només sigui de lectura

Diferència entre la longitud de la matriu i la mida () de ArrayList a Java

Com sincronitzar ArrayList a Java

Com convertir ArrayList a Array i Array a ArrayList en java

Array vs ArrayList a Java

Com ordenar Java ArrayList en ordre descendent

Com eliminar els duplicats de ArrayList a Java