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. Інтерфейс списку розширює Колекція і ітеровані інтерфейси в ієрархічному порядку.
Оголошення класу ArrayList
Давайте подивимося оголошення для класу java.util.ArrayList.
public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, Serializable
Конструктори ArrayList
Конструктор | опис |
---|---|
ArrayList() | Він використовується для побудови списку порожніх масивів. |
ArrayList(Колекція c) | Він використовується для створення списку масивів, який ініціалізується елементами колекції c. |
ArrayList (ємність int) | Він використовується для побудови списку масивів із заданою початковою ємністю. |
Методи ArrayList
метод | опис |
---|---|
недійсний додати (індекс цілого типу, елемент E) | Він використовується, щоб вставити вказаний елемент у вказану позицію в списку. |
логічний додати (І і) | Він використовується для додавання зазначеного елемента в кінець списку. |
логічне значення addAll (Колекція c) | Він використовується для додавання всіх елементів у вказаній колекції в кінець цього списку в тому порядку, у якому їх повертає ітератор зазначеної колекції. |
логічне значення addAll (індекс int, колекція c) | Він використовується для додавання всіх елементів у вказану колекцію, починаючи з зазначеної позиції списку. |
порожнеча чиста () | Він використовується для видалення всіх елементів із цього списку. |
void secureCapacity(int requiredCapacity) | Він використовується для збільшення ємності екземпляра ArrayList. |
E get(int index) | Він використовується для отримання елемента з певної позиції списку. |
логічне isEmpty() | Він повертає true, якщо список порожній, інакше повертає false. |
Ітератор() | |
listIterator() | |
int lastIndexOf(Object o) | Він використовується для повернення індексу в цьому списку останнього входження зазначеного елемента або -1, якщо список не містить цього елемента. |
Object[] toArray() | Він використовується для повернення масиву, що містить усі елементи цього списку в правильному порядку. |
T[] toArray(T[] a) | Він використовується для повернення масиву, що містить усі елементи цього списку в правильному порядку. |
Об'єкт clone() | Він використовується для повернення неглибокої копії ArrayList. |
логічний містить (об'єкт o) | Він повертає true, якщо список містить вказаний елемент. |
int indexOf(Object o) | Він використовується для повернення індексу в цьому списку першого входження зазначеного елемента або -1, якщо список не містить цього елемента. |
E видалити (індекс) | Він використовується для видалення елемента, який знаходиться на вказаній позиції у списку. |
логічне видалення (об'єкт o) | Він використовується для видалення першого входження зазначеного елемента. |
логічне значення removeAll (Колекція c) | Використовується для видалення всіх елементів зі списку. |
логічне значення RemoveIf (фільтр предикатів) | Він використовується для видалення всіх елементів зі списку, який задовольняє заданий предикат. |
protected void removeRange (int fromIndex, int toIndex) | Він використовується для видалення всіх елементів, що знаходяться в заданому діапазоні. |
void replaceAll (оператор UnaryOperator) | Використовується для заміни всіх елементів зі списку вказаним елементом. |
void retainAll (колекція c) | Він використовується для збереження всіх елементів у списку, присутніх у вказаній колекції. |
E set(int index, E element) | Використовується для заміни зазначеного елемента в списку, присутнього на вказаній позиції. |
void сортування (компаратор c) | Використовується для сортування елементів списку на основі вказаного компаратора. |
Spliterator spliterator() | Він використовується для створення роздільника над елементами списку. |
List subList(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.
java int до char
ArrayList list=new ArrayList();//creating new generic arraylist
У загальній колекції ми вказуємо тип у кутових дужках. Тепер ArrayList змушений мати в ньому лише вказаний тип об’єкта. Якщо ви спробуєте додати інший тип об’єкта, він дає a помилка під час компіляції .
Щоб отримати додаткові відомості про генерики Java, натисніть тут Підручник з універсалів Java .
Приклад 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
Існують різні способи обходу елементів колекції:
- Через інтерфейс ітератора.
- За допомогою циклу for-each.
- Через інтерфейс ListIterator.
- За допомогою циклу for.
- Методом forEach().
- Методом forEachRemaining().
Ітерація колекції іншими шляхами
Давайте розглянемо приклад проходження елементів ArrayList іншими способами
Ім'я файлу: 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++)>
Вихід:
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,'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); } } }
Вихід:
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('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); } } }
Вихід:
[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('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); } }
Вихід:
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('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); } }
Вихід:
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('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()); } } }
Вихід:
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('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()); } }
Вихід:
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,'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); } } }Перевірте зараз
Вихід:
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('The size of the array is: ' + 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('The size of the array is: ' + al.size()); } }
Вихід:
The size of the array is: 0
Пояснення: Ми бачимо, що розмір все ще дорівнює 0, і причина цього полягає в тому, що число 10 представляє ємність, а не розмір. Насправді розмір представляє загальну кількість елементів, присутніх у масиві. Оскільки ми не додали жодного елемента, тому розмір списку масиву дорівнює нулю в обох програмах.
Ємність представляє загальну кількість елементів, які може містити список масиву. Таким чином, місткість списку масиву завжди більша або дорівнює розміру списку масиву. Коли ми додаємо елемент до списку масиву, він перевіряє, чи став розмір списку масиву рівним місткості чи ні. Якщо так, то місткість списку масиву збільшується. Отже, у наведеному вище прикладі ємність буде 10, доки до списку не буде додано 10 елементів. Коли ми додаємо 11тиселемента, місткість збільшується. Зауважте, що в обох прикладах ємність списку масиву дорівнює 10. У першому випадку ємність дорівнює 10, тому що ємність списку масиву за замовчуванням дорівнює 10. У другому випадку ми прямо згадали, що ємність масиву список 10.
Примітка. Немає жодного стандартного методу, щоб визначити, як збільшується ємність у списку масиву. Фактично, спосіб збільшення ємності відрізняється від однієї версії GDK до іншої. Тому необхідно перевірити, як код збільшення ємності реалізовано в GDK. У класі ArrayList немає попередньо визначеного методу, який повертає ємність списку масиву. Тому для кращого розуміння використовуйте метод capacity() класу Vector. Логіка розміру та ємності однакова в класі ArrayList і Vector.
Пов’язані теми
Як відсортувати ArrayList у Java
Коли використовувати ArrayList і LinkedList у Java
Різниця між ArrayList і LinkedList
Різниця між ArrayList і Vector
Як порівняти два ArrayList в Java
Як перевернути ArrayList у Java
Коли використовувати ArrayList і LinkedList у Java
Як зробити ArrayList лише для читання
Різниця між довжиною масиву та розміром () ArrayList у Java
Як синхронізувати ArrayList у Java
Як перетворити ArrayList на Array і Array на ArrayList у java
Array проти ArrayList у Java
Як відсортувати Java ArrayList у порядку спадання
Як видалити дублікати з ArrayList у Java