logo

Java ArrayList

Йерархия на класове на Java ArrayList

Java ArrayList класът използва a динамичен масив за съхранение на елементите. Това е като масив, но има без ограничение на размера . Можем да добавяме или премахваме елементи по всяко време. Така че е много по-гъвкав от традиционния масив. Намира се в java.util пакет. Това е като вектора в C++.

ArrayList в Java също може да има дублирани елементи. Той имплементира интерфейса List, така че можем да използваме всички методи на интерфейса List тук. ArrayList поддържа реда за вмъкване вътрешно.

Той наследява класа AbstractList и имплементира Списък интерфейс .

Важните точки относно класа Java ArrayList са:

  • Класът Java ArrayList може да съдържа дублиращи се елементи.
  • Класът Java ArrayList поддържа реда на вмъкване.
  • Класът Java ArrayList не е синхронизирани .
  • Java ArrayList позволява произволен достъп, тъй като масивът работи на базата на индекс.
  • В ArrayList манипулирането е малко по-бавно от LinkedList в Java, защото трябва да се извърши много преместване, ако някой елемент бъде премахнат от списъка с масиви.
  • Не можем да създадем списък с масиви от примитивните типове, като int, float, char и т.н. В такива случаи е необходимо да се използва необходимия клас обвивка. Например:
 ArrayList al = ArrayList(); // does not work ArrayList al = new ArrayList(); // works fine 
  • Java ArrayList се инициализира от размера. Размерът е динамичен в списъка с масиви, който варира според елементите, които се добавят или премахват от списъка.

Йерархия на клас ArrayList

Както е показано на диаграмата по-горе, класът Java ArrayList разширява класа AbstractList, който имплементира интерфейса List. Интерфейсът List разширява колекция и Итерируеми интерфейси в йерархичен ред.

Декларация на клас ArrayList

Нека да видим декларацията за класа java.util.ArrayList.

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

Конструктори на ArrayList

Конструктор Описание
ArrayList() Използва се за изграждане на списък с празен масив.
ArrayList(Колекция c) Използва се за изграждане на списък с масиви, който се инициализира с елементите на колекцията c.
ArrayList(int капацитет) Използва се за изграждане на списък с масиви, който има определения първоначален капацитет.

Методи на ArrayList

Метод Описание
невалиден добавете (int индекс, E елемент) Използва се за вмъкване на посочения елемент на посочената позиция в списък.
булево добавете (и и) Използва се за добавяне на посочения елемент в края на списък.
boolean addAll (Колекция c) Използва се за добавяне на всички елементи в посочената колекция в края на този списък в реда, в който са върнати от итератора на посочената колекция.
boolean addAll (int index, Collection c) Използва се за добавяне на всички елементи в посочената колекция, започвайки от посочената позиция в списъка.
празнота ясно () Използва се за премахване на всички елементи от този списък.
void secureCapacity(int requiredCapacity) Използва се за подобряване на капацитета на екземпляр на ArrayList.
E get(int индекс) Използва се за извличане на елемента от определена позиция в списъка.
булево isEmpty() Връща true, ако списъкът е празен, в противен случай false.
Итератор()
listIterator()
int lastIndexOf(Object o) Използва се за връщане на индекса в този списък на последното срещане на посочения елемент или -1, ако списъкът не съдържа този елемент.
Object[] toArray() Използва се за връщане на масив, съдържащ всички елементи в този списък в правилния ред.
T[] toArray(T[] a) Използва се за връщане на масив, съдържащ всички елементи в този списък в правилния ред.
Клониране на обект () Използва се за връщане на плитко копие на ArrayList.
boolean съдържа (обект o) Връща true, ако списъкът съдържа посочения елемент.
int indexOf(Object o) Използва се за връщане на индекса в този списък на първото появяване на посочения елемент или -1, ако списъкът не съдържа този елемент.
E премахване (int индекс) Използва се за премахване на елемента, присъстващ на посочената позиция в списъка.
булево премахване (обект o) Използва се за премахване на първото появяване на посочения елемент.
boolean removeAll (Колекция c) Използва се за премахване на всички елементи от списъка.
boolean removeIf (филтър за предикати) Използва се за премахване на всички елементи от списъка, които отговарят на дадения предикат.
protected void removeRange (int fromIndex, int toIndex) Използва се за премахване на всички елементи в дадения диапазон.
void replaceAll(оператор UnaryOperator) Използва се за замяна на всички елементи от списъка с посочения елемент.
void retainAll (Колекция c) Използва се за запазване на всички елементи в списъка, които присъстват в указаната колекция.
E набор (int индекс, E елемент) Използва се за заместване на посочения елемент в списъка, присъстващ на посочената позиция.
празно сортиране (компаратор c) Използва се за сортиране на елементите от списъка на базата на посочения компаратор.
Spliterator spliterator() Използва се за създаване на сплитератор върху елементите в списък.
Подсписък на списъка (int fromIndex, int toIndex) Използва се за извличане на всички елементи, които се намират в дадения диапазон.
int size() Използва се за връщане на броя елементи, присъстващи в списъка.
void trimToSize() Използва се за намаляване на капацитета на този екземпляр на ArrayList до текущия размер на списъка.

Java Non-generic Vs. Generic Collection

Рамката за събиране на Java не беше обща преди JDK 1.5. От 1.5 е генеричен.

Новата обща колекция на Java ви позволява да имате само един тип обект в колекция. Сега той е безопасен за типа, така че не се изисква преобразуване на типа по време на изпълнение.

Нека видим стария необобщен пример за създаване на Java колекция.

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

Нека да видим новия общ пример за създаване на java колекция.

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

В обща колекция ние определяме типа в ъглови скоби. Сега ArrayList е принуден да има единствения определен тип обект в него. Ако се опитате да добавите друг тип обект, той дава a грешка по време на компилиране .

За повече информация относно генеричните продукти на Java щракнете тук Урок за Java Generics .

Пример за Java ArrayList

Име на файл: 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); } } 
Тествайте сега

Изход:

[Mango, Apple, Banana, Grapes] 

Итериране на ArrayList с помощта на Iterator

Нека видим пример за обхождане на елементи на ArrayList с помощта на интерфейса на Iterator.

Име на файл: 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 } } } 
Тествайте сега

Изход:

Mango Apple Banana Grapes 

Итериране на ArrayList с помощта на цикъл For-each

Нека видим пример за преминаване през елементите на ArrayList с помощта на цикъла for-each

Име на файл: 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); } } 

Изход:

Тествайте сега
Mango Apple Banana Grapes 

Вземете и задайте ArrayList

The get() метод връща елемента на посочения индекс, докато метод set(). променя елемента.

Име на файл: 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); } } 
Тествайте сега

Изход:

Returning element: Apple Mango Dates Banana Grapes 

Как да сортирате ArrayList

The java.util пакетът предоставя полезен клас Колекции , който има статичния метод sort(). Използвайки Collections.sort() можем лесно да сортираме ArrayList.

Име на файл: 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); } } 

Изход:

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

Начини за повторение на елементите на колекцията в Java

Има различни начини за преминаване през елементите на колекцията:

  1. Чрез интерфейс на итератора.
  2. Чрез for-всяки цикъл.
  3. Чрез интерфейс ListIterator.
  4. Чрез for цикъл.
  5. Чрез метода forEach().
  6. Чрез метода forEachRemaining().

Итерация на колекцията през останалите начини

Нека видим пример за преминаване на елементите на ArrayList по други начини

Име на файл: 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++)>

Изход:

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 

Дефинирани от потребителя класови обекти в Java ArrayList

Нека видим пример, в който съхраняваме обект от клас Student в списък с масиви.

Име на файл: 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); } } } 

Изход:

 101 Sonoo 23 102 Ravi 21 103 Hanumat 25 

Пример за сериализация и десериализация на Java ArrayList

Нека видим пример за сериализиране на обект ArrayList и след това за десериализиране.

Име на файл: 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); } } } 

Изход:

 [Ravi, Vijay, Ajay] 

Java ArrayList пример за добавяне на елементи

Тук виждаме различни начини за добавяне на елемент.

Име на файл: 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); } } 

Изход:

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] 

Java ArrayList пример за премахване на елементи

Тук виждаме различни начини за премахване на елемент.

Име на файл: 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); } } 

Изход:

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

Java ArrayList пример за метод retainAll().

Име на файл: 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()); } } } 

Изход:

 iterating the elements after retaining the elements of al2 Ravi 

Java ArrayList пример за метод isEmpty().

Име на файл: 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()); } } 

Изход:

речник за сортиране на python
Is ArrayList Empty: true After Insertion Is ArrayList Empty: false 

Java ArrayList Пример: Книга

Нека да видим пример за ArrayList, където добавяме книги към списъка и отпечатваме всички книги.

Име на файл: 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); } } } 
Тествайте сега

Изход:

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

Размер и капацитет на ArrayList

Размерът и капацитетът на списък с масиви са двата термина, които начинаещите намират за объркващи. Нека го разберем в този раздел с помощта на някои примери. Разгледайте следния кодов фрагмент.

Име на файл: 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()); } } 

Изход:

 The size of the array is: 0 

Обяснение: Резултатът има смисъл, тъй като не сме направили нищо със списъка с масиви. Сега наблюдавайте следната програма.

Име на файл: 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()); } } 

Изход:

 The size of the array is: 0 

Обяснение: Виждаме, че размерът все още е 0 и причината за това е, че числото 10 представлява капацитета, а не размера. Всъщност размерът представлява общия брой елементи, присъстващи в масива. Следователно, тъй като не сме добавили никакъв елемент, размерът на списъка с масиви е нула и в двете програми.

Капацитетът представлява общия брой елементи, които списъкът с масиви може да съдържа. Следователно капацитетът на списък с масиви винаги е по-голям или равен на размера на списъка с масиви. Когато добавим елемент към списъка с масиви, той проверява дали размерът на списъка с масиви е станал равен на капацитета или не. Ако да, тогава капацитетът на списъка с масиви се увеличава. Така че в горния пример капацитетът ще бъде 10, докато към списъка не бъдат добавени 10 елемента. Когато добавим 11thелемент, капацитетът се увеличава. Обърнете внимание, че и в двата примера капацитетът на списъка с масиви е 10. В първия случай капацитетът е 10, тъй като капацитетът по подразбиране на списъка с масиви е 10. Във втория случай изрично споменахме, че капацитетът на масива списъкът е 10.

Забележка: Няма стандартен метод, който да каже как се увеличава капацитетът в списъка с масиви. Всъщност начинът, по който се увеличава капацитетът, варира от една версия на GDK до друга. Следователно е необходимо да се провери начина, по който кодът за увеличаване на капацитета е внедрен в GDK. В класа ArrayList няма предварително дефиниран метод, който да връща капацитета на списъка с масиви. Следователно, за по-добро разбиране, използвайте метода на капацитет() на класа Vector. Логиката на размера и капацитета е една и съща в класа ArrayList и класа Vector.

Свързани теми

Как да сортирате ArrayList в Java

Разлика между Array и ArrayList

Кога да използвате ArrayList и LinkedList в Java

Разлика между ArrayList и LinkedList

Разлика между ArrayList и Vector

Как да сравните два ArrayList в Java

Как да обърнете ArrayList в Java

Кога да използвате ArrayList и LinkedList в Java

Как да направите ArrayList само за четене

Разлика между дължината на масива и size() на ArrayList в Java

Как да синхронизирате ArrayList в Java

Как да конвертирате ArrayList в Array и Array в ArrayList в java

Array срещу ArrayList в Java

Как да сортирате Java ArrayList в низходящ ред

Как да премахнете дубликати от ArrayList в Java