Java. Клас ArrayList. Методи, що змінюють дані в масиві

Клас ArrayList. Методи, що змінюють дані в масиві


Зміст


Пошук на інших ресурсах:

 
1. Метод add(). Додати елемент в кінець масиву

Метод add() додає елемент до масиву. Метод має дві перевантажені реалізації

add(E obj)
add(int index, E obj)

тут

  • E – тип елементів масиву;
  • obj – об’єкт (елемент), що додається до масиву;
  • index – позиція, в яку потрібно вставити елемент obj у масив.

Приклад. У прикладі формується масив квадратів чисел від 1 до 10. Для додавання числа в кінець масиву використовується метод add().

import java.util.*;

public class TrainCollections {

  public static void main(String[] args) {
    // Метод addAll() - додати елемент в кінець масиву
    // 1. Створити масив з чисел типу Integer
    ArrayList<Integer> AI = new ArrayList();

    // 2. Додати у масив квадрати чисел від 1 до 10
    for (int i=1; i<=10; i++)
      AI.add(i*i);

    // 3. Вивести масив
    System.out.println(AI);

    // 4. Додати число 555 на початок масиву в позицію 0
    AI.add(0, 555);
    System.out.println(AI);
  }
}

Результат виконання програми

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[555, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

 

2. Метод addAll(). Додати колекцію до масиву

Метод addAll() призначений для додавання вже існуючої колекції до масиву. Колекцією може бути колекція, черга, інший масив тощо. Метод має дві перевантажені реалізації

addAll(Collection<? extends E>)
addAll(int index, Collection<? extends E>)

тут

  • E – тип елементів масиву (колекції);
  • index – позиція, з якої відбувається вставка.

Приклад. Демонструється використання методу addAll() для масиву цілих чисел.

import java.util.*;

public class TrainCollections {

  public static void main(String[] args) {
    // Метод addAll() - додати колекцію до масиву
    // 1. Створити масив з 5 чисел типу Float
    ArrayList<Float> AI = new ArrayList();
    AI.add(1.0f);
    AI.add(2.0f);
    AI.add(3.0f);
    AI.add(4.0f);
    AI.add(5.0f);
    System.out.println("AI = " + AI);

    // 2. Створити другий масив з 3 чисел типу Float
    ArrayList<Float> AI2 = new ArrayList();
    for (int i=1; i<=3; i++)
      AI2.add(i*15f);
    System.out.println("AI2 = " + AI2);

    // 3. Додати масив AI2 в кінець масиву AI
    AI.addAll(AI2);
    System.out.println("AI + AI2 = " + AI);

    // 4. Записати масив AI2 в масив AI починаючи з позиції 2
    AI.addAll(2, AI2);
    System.out.println("AI[2] + AI2 = " + AI);
  }
}

Результат виконання програми

AI = [1.0, 2.0, 3.0, 4.0, 5.0]
AI2 = [15.0, 30.0, 45.0]
AI + AI2 = [1.0, 2.0, 3.0, 4.0, 5.0, 15.0, 30.0, 45.0]
AI[2] + AI2 = [1.0, 2.0, 15.0, 30.0, 45.0, 3.0, 4.0, 5.0, 15.0, 30.0, 45.0]

 

3. Метод clear(). Очистити масив

Метод clear() призначений для очищення масиву. Згідно з документацією загальна форма оголошення методу наступна

public void clear();

 

Приклад. У прикладі створюється колекція з символів-розділювачів.

 

import java.util.*;

public class TrainCollections {

  public static void main(String[] args) {
    // Метод clear() - Очистити колекцію
    // 1. Створити колекцію з розділових символів у реченні
    ArrayList<Character> AL = new ArrayList();
    AL.add(';');
    AL.add(':');
    AL.add(',');
    AL.add('.');
    AL.add('!');
    AL.add('?');
    AL.add(' ');

    // 2. Вивести колекцію
    System.out.println("AL => " + AL);

    // 3. Очистити колекцію
    AL.clear();

    // 4. Вивести колекцію після очищення
    System.out.println("AL.clear() => " + AL);
  }
}

Результат виконання програми

AL => [;, :, ,, ., !, ?,  ]
AL.clear() => []

 

4. Метод remove(). Видалити елемент в заданій позиції

З допомогою методу remove() можна видалити елемент у заданій позиції. Згідно з документацією, оголошення методу наступне

public E remove(int index);

тут

  • E – тип елементів масиву (колекції);
  • index – номер позиції, яку потрібно видалити. Позиція нумерується з 0.

Метод повертає значення елементу, що видаляється з масиву (колекції).

Якщо значення index вказано за межами допустимого діапазону

(index < 0 || index >= size())

то буде згенероване виключення IndexOutOfBoundsException.

Приклад.

import java.util.*;

public class TrainCollections {

  public static void main(String[] args) {
    // Метод remove() - видалити окремий елемент з масиву
    // 1. Створити колекцію дійсних чисел
    ArrayList<Float> AL = new ArrayList<Float>();
    AL.add(2.8f);
    AL.add(3.5f);
    AL.add(7.2f);
    AL.add(9.4f);
    AL.add(5.2f);

    // 2. Вивести колекцію
    System.out.print("AL => ");
    for (int i=0; i<AL.size(); i++)
      System.out.print(AL.get(i) + "  ");
    System.out.println();

    // 3. Видалити елемент в позиції 2, який має значення 7.2
    AL.remove(2);

    // 4. Вивести змінену колекцію
    System.out.print("AL => ");
    for (int i=0; i<AL.size(); i++)
      System.out.print(AL.get(i) + "  ");
  }
}

Результат виконання програми

AL => 2.8  3.5  7.2  9.4  5.2
AL => 2.8  3.5  9.4  5.2

 

5. Метод removeAll(). Видалити групу елементів з колекції

З допомогою методу removeAll() можна видалити декілька елементів, які представлені у вигляді колекції. Згідно з документацією оголошення методу наступне:

public boolean removeAll(Collection<?> c);

тут

  • c – колекція (масив) елементів, які потрібно видалити з поточної колекції.

Метод повертає true, якщо поточний масив змінився у результаті виклику.

Приклад.

У прикладі формуються дві цілочисельні колекції:

  • AL – вихідна колекція чисел;
  • AL2 – колекція чисел, які потрібно видалити з колекції AL.

З допомогою методу removeAll() відбувається видалення з колекції AL усіх елементів, що входять у колекцію AL2.

import java.util.*;

public class TrainCollections {

  public static void main(String[] args) {
    // Метод removeAll() - видалити групу елементів з масиву
    // 1. Створити колекцію цілих чисел
    ArrayList<Integer> AL = new ArrayList<Integer>();
    AL.add(2);
    AL.add(3);
    AL.add(2);
    AL.add(4);
    AL.add(7);
    AL.add(3);
    AL.add(4);
    AL.add(5);
    AL.add(6);
    AL.add(1);

    // 2. Вивести вихідну колекцію
    System.out.print("AL => ");
    for (int i=0; i<AL.size(); i++)
      System.out.print(AL.get(i) + "  ");
    System.out.println();

    // 3. Створити колекцію чисел, які потрібно видалити
    ArrayList<Integer> AL2 = new ArrayList<Integer>();

    // видалити усі числа 2, 4, 7
    AL2.add(2);
    AL2.add(4);
    AL2.add(7);

    // 4. Викликати метод removeAll()
    AL.removeAll(AL2);

    // 4. Вивести змінену колекцію
    System.out.print("AL => ");
    for (int i=0; i<AL.size(); i++)
      System.out.print(AL.get(i) + "  ");
  }
}

Результат виконання програми

AL => 2  3  2  4  7  3  4  5  6  1
AL => 3  3  5  6  1

 

6. Метод removeIf(). Змінити колекцію на основі предикату

З допомогою методу removeIf() можна видалити елементи з колекції згідно з умовою. У результаті формується нова колекція (масив). Загальна форма оголошення методу наступна

public boolean removeIf(Predicate<? super E> filter);

тут

  • filter – посилання (предикат), що визначає умову фільтрування. Умова задається лямбда-виразом.

Метод повертає true, якщо хоча б один елемент був видалений.

Приклад. У прикладі демонструється виконання методу removeIf(). Демонструються наступні операції:

  • створюється колекція цілих чисел;
  • формується предикат, в якому визначаються числа, які більше 4;
  • викликається метод removeIf() з допомогою якого формується новий масив чисел згідно з предикатом.

 

import java.util.*;
import java.util.function.*;

public class TrainCollections {

  public static void main(String[] args) {
    // Метод removeIf() - змінити масив на основі умови
    // 1. Створити колекцію цілих чисел
    ArrayList<Integer> AL = new ArrayList<Integer>();
    AL.add(2);
    AL.add(3);
    AL.add(2);
    AL.add(4);
    AL.add(7);
    AL.add(3);
    AL.add(4);
    AL.add(5);
    AL.add(6);
    AL.add(1);

    // 2. Вивести вихідну колекцію
    System.out.print("AL => ");
    for (int i=0; i<AL.size(); i++)
      System.out.print(AL.get(i) + "  ");
    System.out.println();

    // 3. Оголосити посилання на інтерфейс Predicate<Integer>
    Predicate<Integer> ref;

    // 4. Сформувати умову для посилання ref на основі лямбда-виразу:
    //    взяти всі числа, що більше 4
    ref = (value) -> value > 4;

    // 5. Викликати метод removeIf() та передати йому посилання ref з умовою
    AL.removeIf(ref);    // видалити усі числа, що більше 4

    // 6. Вивести змінений масив AL
    System.out.print("AL => ");
    for (int i=0; i<AL.size(); i++)
      System.out.print(AL.get(i) + "  ");
    System.out.println();
  }
}

Результат виконання програми

AL => 2  3  2  4  7  3  4  5  6  1
AL => 2  3  2  4  3  4  1

 

7. Метод replaceAll(). Виконати обчислення над кожним елементом масиву

З допомогою методу replaceAll() можна застосувати деяку операцію до кожного елементу масиву. Такою операцією може бути, наприклад добуток кожного елементу на 2. Згідно з документацією загальна форма оголошення методу наступна:

public void replaceAll(UnaryOperator<E> operator);

тут

  • operator – лямбда-вираз, що визначає операцію над кожним елементом послідовності. Лямбда-вираз формується з допомогою функціонального інтерфейсу UnaryOperator<T>.

Приклад. У прикладі створюється масив цілих чисел. Потім кожен елемент масиву множиться на 3 з допомогою методу replaceAll(). Для виконання обчислення формується посилання на відповідний лямбда-вираз.

 

import java.util.*;
import java.util.function.*;

public class TrainCollections {

  public static void main(String[] args) {
    // Метод replaceAll() - змінити значення елементів вихідного масиву
    // 1. Створити колекцію цілих чисел
    ArrayList<Integer> AL = new ArrayList<Integer>();
    AL.add(2);
    AL.add(3);
    AL.add(2);
    AL.add(4);
    AL.add(7);
    AL.add(3);

    // 2. Вивести колекцію з допомогою ітератора
    Iterator<Integer> it = AL.iterator();
    System.out.print("AL => ");
    while (it.hasNext())
      System.out.print(it.next()+"  ");
    System.out.println();

    // 3. Сформувати лямбда-вираз, що множить елемент на 3
    UnaryOperator<Integer> op = (num) -> num*3;

    // 4. Викликати метод replaceAll() та застосувати до нього оператор op
    AL.replaceAll(op);

    // 5. Вивести змінену колекцію (масив) цілих чисел
    it = AL.iterator();
    System.out.print("AL => ");
    while (it.hasNext()) {
      System.out.print(it.next() + "  ");
    }
  }
}

Результат виконання програми

AL => 2  3  2  4  7  3
AL => 6  9  6  12  21  9

 

8. Метод set(). Встановити нове значення в елементі

Метод set() встановлює нове значення в заданій позиції масиву. Іншими словами, старе значення масиву в заданій позиції замінюється новим. Оголошення методу має вигляд

public E set(int index, E element);

тут

  • index – позиція вставки (нумерується з 0);
  • element – нове значення, яке потрібно встановити в позиції index.

Метод повертає попереднє значення, яке було встановлене в заданій позиції.

Якщо значення index виходить за межі допустимого діапазону, тобто

(index < 0 || index >= size())

то буде згенероване виключення IndexOutOfBoundsException.

Приклад.

import java.util.*;
import java.util.function.*;

public class TrainCollections {

  public static void main(String[] args) {
    // Метод set() - встановити значення в окремому елементі масиву
    // 1. Створити колекцію рядків
    ArrayList<String> AL = new ArrayList<String>();
    AL.add("a");
    AL.add("b");
    AL.add("c");

    // 2. Вивести вихідний масив з допомогою ітератора
    Iterator<String> it = AL.iterator();
    System.out.print("AL => ");
    while (it.hasNext())
      System.out.print(it.next()+"  ");
    System.out.println();

    // 3. Встановити нове значення в елементі з індексом 1
    String oldValue;
    oldValue = AL.set(1, "bbb");

    // 4. Вивести попередній рядок
    System.out.println("oldValue = " + oldValue);

    // 5. Вивести змінений масив
    System.out.print("AL => ");
    for (int i=0; i<AL.size(); i++)
      System.out.print(AL.get(i) + "  ");
    System.out.println();
  }
}

Результат виконання програми

AL => a  b  c
oldValue = b
AL => a  bbb  c

 

9. Метод sort(). Посортувати елементи масиву

З допомогою методу sort() можна посортувати елементи масиву. Загальна форма оголошення методу наступна

public void sort(Comparator<? super E> c);

тут

  • c – компаратор (умова), який реалізує принцип порівняння будь-яких двох елементів масиву. Компаратор використовується у випадку, коли розробляється власний клас, об’єкти якого можуть бути посортовані за деяким критерієм. У цьому випадку клас повинен реалізувати інтерфейс Comparator. У цьому інтерфейсі визначено метод compare(), який порівнює два елементи. Саме цей метод потрібно перевизначити і реалізувати у цьому класі та задати власний механізм порівняння.

Для стандартних типів-оболонок (Integer, Double, String і т.д.) реалізовано внутрішній компаратор, який сортує елементи в природному порядку (від меншого до більшого або за алфавітом). Для використання стандартного способу сортування потрібно викликати метод sort() з аргументом null

AL.sort(null);

тут AL – масив елементів, що сортується.

Приклад.

import java.util.*;
import java.util.function.*;

public class TrainCollections {

  public static void main(String[] args) {
    // Метод sort() - сортування у природному порядку
    // 1. Створити масив рядків
    ArrayList<String> AL = new ArrayList<String>();
    AL.add("jklm");
    AL.add("abcd");
    AL.add("elsd");
    AL.add("lkls");
    AL.add("azsd");

    // 2. Вивести вихідний масив
    Iterator<String> it = AL.iterator();
    System.out.print("AL => ");
    while (it.hasNext())
      System.out.print(it.next()+"  ");
    System.out.println();

    // 3. Посортувати елементи масиву, метод sort()
    AL.sort(null);

    // 4. Вивести посортований масив
    System.out.print("AL => ");
    for (int i=0; i<AL.size(); i++)
      System.out.print(AL.get(i) + "  ");
    System.out.println();
  }
}

Результат виконання програми

AL => jklm  abcd  elsd  lkls  azsd
AL => abcd  azsd  elsd  jklm  lkls

 


Споріднені теми