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 araMango 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ó:
- Per interfície d'iterador.
- Per for-each bucle.
- Per interfície ListIterator.
- Per bucle for.
- Amb el mètode forEach().
- 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('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++)>
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,'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); } } }
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('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); } } }
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('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); } }
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('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); } }
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('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()); } } }
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('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()); } }
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,'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); } } }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('The size of the array is: ' + 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('The size of the array is: ' + 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
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