Як використовувати Java ArrayList

Java ArrayList - це універсальний змінений розмір масиву. Він надає більшість можливостей, зазвичай очікуваних від масивів іншими мовами. До них належать: доступ до елементів з використанням індексу, додавання, видалення та оновлення елементів, динамічна зміна розміру, перебір елементів тощо. Більшість з цих операцій були спеціально налаштовані для загального використання.

Є кілька інших типів «масивів» (класів, які реалізують інтерфейс List, якщо бути технічним), які призначені для спеціальних цілей. Вони включають:

  • LinkedList підтримує швидку вставку і видалення проміжних індексів.
  • Vector схожий на ArrayList, але синхронізований і підходить замість ArrayList для багатопоточних програм.
  • Стек підтримує операції для імітації списку «першим прийшов - першим вийшов». Це розширює Вектор і, отже, синхронізується.

Ці спеціальні класи виходять за рамки цієї статті. Тим не менш, ви дізнаєтеся, як налаштувати і використовувати універсальний Java ArrayList.

Створення ArrayList

Створити ArrayList дуже просто. Порожній ArrayList може бути створений за допомогою конструктора без аргументів. Тут ми створюємо порожній масив для зберігання рядків.

ArrayList alist = new ArrayList (); ArrayList alist = new ArrayList (); ArrayList alist = new ArrayList ();

Якщо ви знаєте, скільки елементів буде містити ваш список масивів, ви можете вказати початкову ємність. Ця початкова ємність є лише підказкою для виділення пам'яті - масив не обмежений вказаною кількістю елементів. Якщо ви знаєте і вказали початкову ємність, ви можете отримати невелике поліпшення продуктивності.

ArrayList alist = new ArrayList (20); ArrayList alist = new ArrayList (20); ArrayList alist = new ArrayList (20);

Заповнення ArrayList

Додавання предметів наприкінці

Заповнити arraylist досить легко. Просто використовуйте метод add (), щоб додати один елемент до кінця масиву. Ось приклад:

ArrayList alist = new ArrayList (); alist.add(""apple""); alist.add(""banana""); alist.add(""cantaloupe""); alist.add(""orange""); System.out.println(alist); # prints [apple, banana, cantaloupe, orange]  ArrayList alist = new ArrayList (); alist.add(""apple""); alist.add(""banana""); alist.add(""cantaloupe""); alist.add(""orange""); System.out.println(alist); # prints [apple, banana, cantaloupe, orange]  ArrayList alist = new ArrayList (); alist.add(""apple""); alist.add(""banana""); alist.add(""cantaloupe""); alist.add(""orange""); System.out.println(alist); # prints [apple, banana, cantaloupe, orange]

Щоб дізнатися, скільки елементів у масиві, використовуйте метод size ().

System.out.println(""Number of elements in the arraylist: "" + alist.size()); # prints Number of elements in the arraylist: 4

Додавання елементів до вказаного індексу

Хочете додати елемент за довільним індексом? Вкажіть індекс як перший аргумент, і елемент буде додано до цього індексу:

alist.add(3, ""grapes""); System.out.println(alist); # prints [apple, banana, cantaloupe, grapes, orange]

Додавання групи предметів

Ви також можете додавати елементи з будь-якої збірки до ієрархії збірки Java. ArrayList - це певний тип, який називається List. Ось спосіб створити список з набору елементів (використовуючи Arrays.asList ()) і додати його в ArrayList.

List items = Arrays.asList(""pear"", ""cherry""); alist.addAll(items); System.out.println(alist); # prints [apple, banana, cantaloupe, grapes, orange, pear, cherry]  List items = Arrays.asList(""pear"", ""cherry""); alist.addAll(items); System.out.println(alist); # prints [apple, banana, cantaloupe, grapes, orange, pear, cherry]

Звичайно, ви можете вказати індекс як перший аргумент, щоб додати елементи, що починаються з цього індексу.

Доступ до елементів

Як тільки елементи будуть додані до списку листування, як ми знову отримаємо доступ до них?

Доступ за допомогою індексу

Якщо ви знаєте індекс елемента, ви можете використовувати метод get (), щоб отримати елемент з цим індексом.

String item = alist.get(2); System.out.println(""Item at index 2 is: "" + item); # prints Item at index 2 is: cantaloupe

Знаходження предметів

Що якщо ви не знаєте індекс предмета? Ви можете використовувати indexOf (), щоб перевірити, чи є елемент у масиві, і отримати його, використовуючи повернений індекс.

System.out.println(alist); int index = alist.indexOf(""orange""); if ( index < 0 ) System.out.println(""Item \""orange\"" not found""); else System.out.println(""Item \""orange\"" found at index "" + index); # prints [apple, banana, cantaloupe, grapes, orange, pear, cherry] Item ""orange"" found at index 4

Що робити, якщо цей елемент відсутній в масиві? Метод indexOf () повертає -1, якщо елемент не знайдено.

index = alist.indexOf(""grape""); if ( index < 0 ) System.out.println(""Item \""grape\"" not found""); else System.out.println(""Item \""grape\"" found at index "" + index); # prints Item ""grape"" not found

Ітерація за списком ArrayList

Звичайно, найбільш поширене використання ArrayList - це перебір елементів. Це може бути досягнуто кількома способами. Ми покажемо пару простих тут.

Ось найпростіший спосіб перебору масиву і вилучення елементів для деякої обробки.

for (String fruit: alist) { System.out.println(""Found fruit \"""" + fruit + ""\""""); } # prints Found fruit ""apple"" Found fruit ""banana"" Found fruit ""cantaloupe"" Found fruit ""grapes"" Found fruit ""orange"" Found fruit ""pear"" Found fruit ""cherry"

Цей код використовує розширений цикл Java, який було представлено в Java 1.5. До цього ви можете перебирати елементи за допомогою ітератора. Інструмент також використовується, якщо ви хочете вилучити елементи у процесі ітерації, як показано у прикладі нижче. (Зверніть увагу, що ми робимо копію масиву і працюємо над копією.)

ArrayList blist = new ArrayList (alist); for (Iterator iter = blist.iterator() ; iter.hasNext() ; ) { String fruit = iter.next(); if ( fruit.startsWith(""c"") ) iter.remove(); else System.out.println(""Keeping \"""" + fruit + ""\""""); } # prints Keeping ""apple"" Keeping ""banana"" Keeping ""grapes"" Keeping ""orange"" Keeping ""pear"  ArrayList blist = new ArrayList (alist); for (Iterator iter = blist.iterator() ; iter.hasNext() ; ) { String fruit = iter.next(); if ( fruit.startsWith(""c"") ) iter.remove(); else System.out.println(""Keeping \"""" + fruit + ""\""""); } # prints Keeping ""apple"" Keeping ""banana"" Keeping ""grapes"" Keeping ""orange"" Keeping ""pear"  ArrayList blist = new ArrayList (alist); for (Iterator iter = blist.iterator() ; iter.hasNext() ; ) { String fruit = iter.next(); if ( fruit.startsWith(""c"") ) iter.remove(); else System.out.println(""Keeping \"""" + fruit + ""\""""); } # prints Keeping ""apple"" Keeping ""banana"" Keeping ""grapes"" Keeping ""orange"" Keeping ""pear"

Заміна предметів

Як тільки елементи додано, нам потрібен спосіб замінити непотрібні елементи. Це можна зробити за допомогою методу set () з індексом.

alist.set(5, ""pineapple""); System.out.println(alist); # prints [apple, banana, cantaloupe, grapes, orange, pineapple, cherry]

Вилучення предметів

Давайте тепер подивимося, як ми можемо видалити елементи з масиву. Якщо ви знаєте індекс елемента (можливо, ви використовували indexOf (), описаний вище), ви можете використовувати метод remove () з індексом. Повертає віддалений елемент.

String fruit = alist.remove(2); System.out.println(""Removed element at 2: "" + fruit); # prints Removed element at 2: cantaloupe

Ви також можете вказати елемент для вилучення першого входження елемента у списку. Метод повертає true, якщо елемент було знайдено і вилучено.

fruit = ""grapes""; System.out.println(""Remove "" +fruit+ "" from the list? "" + alist.remove(fruit)); # prints Remove grapes from the list? true

Як ви використовуєте ArrayList у своїх проектах і також з якими спеціальними проблемами ви зіткнулися? Будь ласка, дайте нам знати в коментарях нижче.