Java. Класс ArrayList. Методы преобразующие массив в целом

Класс ArrayList. Методы преобразующие массив в целом


Содержание


Поиск на других ресурсах:

1. Метод clone(). Получить копию массива

Метод clone() выполняет копию из массива. Копия размещается в другом участке памяти. Согласно документации общая форма метода следующая

public Object clone();

 

Пример.

В примере формируется массив чисел. Затем с помощью метода clone() делается копия массива. В копии меняется один элемент. Под конец выводятся оба массива. После результата видно, что массивы имеют разные значения. Это означает, что они размещаются в разных участках памяти. Изменение значений в одном массиве не влияет на другой массив.

import java.util.*;

public class TrainCollections {

  public static void main(String[] args) {
    // Метод clone() - сделать копию из коллекции

    // 1. Создать коллекцию из чисел
    ArrayList<Integer> AL = new ArrayList();
    AL.add(1);
    AL.add(2);
    AL.add(3);
    AL.add(4);
    AL.add(5);
    System.out.println("AL => " + AL);

    // 2. Сделать копию из коллекции
    ArrayList<Integer> AL2 = (ArrayList<Integer>) AL.clone();

    // 3. Вывести копию AL2
    System.out.println("AL2 => " + AL2);

    // 4. Изменить копию AL2
    AL2.set(2, 100); // Изменить другой элемент

    // 5. Вывести оригинал AL и копию AL2
    System.out.println("After change AL2: ");
    System.out.println("AL = " + AL);
    System.out.println("AL2 = " + AL2);
  }
}

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

AL => [1, 2, 3, 4, 5]
AL2 => [1, 2, 3, 4, 5]
After change AL2:
AL = [1, 2, 3, 4, 5]
AL2 = [1, 2, 100, 4, 5]

 

2. Метод subList().Получить фрагмент массива на основе заданного массива

Метод subList() возвращает подмассив на основе заданного массива. Общая форма объявления метода следующая

public List<E> subList(int fromIndex, int toIndex);

здесь

  • fromIndex, toIndex – диапазон значений в исходном массиве, на основе которого формируется результирующий массив.

Для метода определены следующие особенности:

  • значение fromIndex рассматривается как включенное. Значение toIndex рассматривается как исключенное. Например, если нужно получить первые 3 элемента массива, то fromIndex=0, toIndex=3;
  • если fromIndex и toIndex равны между собой, то возвращается пустой массив;
  • возвращаемый список является составной частью исходного списка. Это означает, что все изменения в результатах будут изменять исходный список. И, напротив, все изменения в исходном списке будут влиять на результирующий список;
  • для результирующего списка определены все основные операции над списком, которые будут влиять на исходный список.

При неправильном использовании метода могут быть сгенерированы следующие исключения:

  • IndexOutOfBoundsException – случай, когда значение fromIndex<0 или toIndex>size();
  • IllegalArgumentException – случай, когда fromIndex>toIndex.

Пример.

 

import java.util.*;

public class TrainCollections {

  public static void main(String[] args) {
    // Метод subList() - получить подмассив на основе заданного массива
    // 1. Создать массив чисел
    ArrayList<Integer> AL = new ArrayList<Integer>();
    AL.add(10);
    AL.add(20);
    AL.add(30);
    AL.add(40);
    AL.add(50);
    AL.add(60);
    AL.add(70);

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

    // 3. Получить подмассив
    List<Integer> AL2 = (List<Integer>) AL.subList(1, 4); // AL2 = { 20, 30, 40 }

    // 4. Вывести подмассив
    System.out.print("AL2 => ");
    for (int i=0; i<AL2.size(); i++)
      System.out.print(AL2.get(i) + " ");
    System.out.println();

    // 5. Изменить элементы с индексами 2, 3 в исходном массиве,
    //    будет изменяться и массив AL2
    AL.set(2, 55);
    AL.set(3, 88); // AL2 => 20 555 888

    // 6. Вывести подмассив
    System.out.print("AL2 => ");
    for (int i=0; i<AL2.size(); i++)
      System.out.print(AL2.get(i) + " ");
    System.out.println();

    // 7. Очистить массив AL2
    AL2.clear();

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

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

AL => 10 20 30 40 50 60 70
AL2 => 20 30 40
AL2 => 20 55 88
AL => 10 50 60 70

 

3. Метод toArray(). Конвертировать массив ArrayList в массив типа Object[]

Метод toArray() конвертирует массив ArrayList в массив типа Object[]. Согласно документации объявления метода следующее

public Object[] toArray();

Пример.

В этом примере создается массив символов типа ArrayList. Затем этот массив преобразуется в массив типа Object[].

import java.util.*;

public class TrainCollections {

  public static void main(String[] args) {
    // Метод toArray() - получить подмассив на основе заданного массива
    // 1. Создать массив символов
    ArrayList<Character> AL = new ArrayList<Character>();
    AL.add('0');
    AL.add('1');
    AL.add('2');
    AL.add('3');
    AL.add('4');
    AL.add('5');

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

    // 3. Конвертировать в массив типа Object[]
    Object AC[] = AL.toArray();

    // 4. Вывести массив AC
    System.out.print("AC => ");
    for (int i=0; i<AC.length; i++)
      System.out.print(AC[i] + " ");
    System.out.println();
  }
}

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

AL => 0 1 2 3 4 5
AC => 0 1 2 3 4 5

 

4. Метод retainAll(). Сформировать новый массив, содержащий элементы заданной коллекции

Метод retainAll() позволяет в заданном массиве сохранить только элементы, которые определены в заданной коллекции. Иными словами, метод удаляет из массива элементы, не содержащиеся в заданной коллекции. Согласно документации объявление метода имеет следующий вид

public boolean retainAll(Collection<?> c);

здесь

  • c – коллекция элементов, которые необходимо сохранить в исходном массиве.

Если в исходном массиве произошли изменения, метод возвращает true.

Пример.

В примере выполняются следующие действия:

  • создается исходный массив целых чисел AL;
  • создается массив AL2, содержащий числа, которые нужно оставить в массиве AL;
  • вызывается метод retainAll() для массива AL.

 

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

public class TrainCollections {

  public static void main(String[] args) {
    // Метод retainAll() - сформировать новый массив на основе заданного
    // 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(5);
    AL.add(8);
    AL.add(4);

    // 2. Вывести исходную коллекцию целых чисел с помощью итератора
    Iterator<Integer> it = AL.iterator();
    System.out.print("AL => ");
    while (it.hasNext())
      System.out.print(it.next()+" ");
    System.out.println();

    // 3. Сформировать коллекцию элементов, которые нужно оставить в массиве AL
    ArrayList<Integer> AL2 = new ArrayList<Integer>();
    AL2.add(2);
    AL2.add(4);
    AL2.add(6);
    AL2.add(8);

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

    // 5. Вызвать метод retainAll()
    AL.retainAll(AL2);

    // 6. Вывести измененную коллекцию AL
    it = AL.iterator();
    System.out.print("AL => ");

    while (it.hasNext()) {
      System.out.print(it.next() + " ");
    }
  }
}

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

AL => 2 3 2 4 7 3 5 8 4
AL2 => 2 4 6 8
AL => 2 2 4 8 4

 


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