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

 


Связанные темы