Динамический list в java

Класс ArrayList . Динамический массив. Общие сведения. Создание массива

Класс ArrayList представляет собой динамический массив. В динамическом массиве элементы добавляются и удаляются при необходимости в отличие от стандартных массивов. В стандартном массиве изменить количество элементов массива не получится. Для этого нужно создавать новый массив с новым размером в другом участке памяти и копировать в него данные исходного стандартного массива.

Динамические массивы эффективны в случаях, когда в начале выполнения программы размер массива (данных) неизвестен. Этот размер формируется по мере необходимости.

Класс ArrayList реализует интерфейс List и имеет следующие объявления:

class ArrayList

здесь E – тип сохраняемых объектов.

Список распространенных методов класса следующий:

  • add – добавить элемент в массив;
  • addAll – добавить набор в массив;
  • clear – очистить массив;
  • clone – получить копию массива;
  • contains – определить, содержится ли в списке определенный элемент;
  • containsAll – определить, есть ли все элементы некоторой коллекции в заданной коллекции;
  • ensureCapacity – зарезервировать фрагмент памяти для массива;
  • get – получить элемент массива;
  • indexOf – определить позицию первого вхождения элемента в массиве;
  • isEmpty – определить, пустой ли массив;
  • iterator – получить итератор на массив;
  • lastIndexOf – определить позицию последнего вхождения элемента в массиве;
  • listIterator – получить итератор в виде списка;
  • remove – удалить элемент в заданной позиции;
  • removeAll – удалить группу элементов из коллекции;
  • removeIf – изменить коллекцию на основе предиката;
  • replaceAll – произвести вычисление над каждым элементом массива;
  • retainAll – сформировать новый массив, содержащий элементы заданной коллекции;
  • set – установить новое значение в массиве;
  • size – получить размер массива;
  • sort – рассортировать элементы массива в заданном порядке;
  • subList – получить фрагмент массива на основе заданного массива;
  • toArray – конвертировать массив в массив типа Object[] ;
  • trimToSize – скорректировать текущий размер массива.
Читайте также:  Параметры функции mail php
2. Конструкторы класса. Создание массива. Пример

В классе ArrayList определены следующие конструкторы:

ArrayList() ArrayList(Collectionextends E>) ArrayList(int size)

Первый конструктор создает пустой динамический массив. Второй конструктор создает динамический массив на основе другого массива.

Третий конструктор создает пустой массив с зарезервированным объемом размера size . Если при наращивании количество элементов в таком массиве превысит size , то зарезервированный объем (максимальная емкость) будет увеличен на некоторую величину.

Пример. В примере создаются разные виды динамических массивов.

import java.util.*; public class TrainCollections <  public static void main(String[] args) < // 1. Конструктор ArrayList() // Создать пустой массив целых чисел ArrayList AL = new ArrayList(); // Прибавить к массиву числа от 0 до 9 for (int i=0; iout.println(AL); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] // 2. Создать массив строк на основе другого массива строк, // конструктор ArrayList(Collection) // 2.1. Создать исходный массив ArrayList AS1 = new ArrayList(); AS1.add("Winter"); AS1.add("Spring"); AS1.add("Autumn"); AS1.add("Summer"); System.out.println(AS1); // [Winter, Spring, Autumn, Summer] // 2.2. Использовать конструктор ArrayList(Collection) ArrayList AS2 = new ArrayList(AS1); System.out.println(AS2); // [Winter, Spring, Autumn, Summer] // 3. Конструктор ArrayList(int) // 3.1. Создать пустой массив з зарезервированным размером 8 элементов ArrayList AC = new ArrayList(8); // 3.2. Вывести размер массива System.out.println(AC.size()); // 0 - это есть текущий размер массива > >

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

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] [Winter, Spring, Autumn, Summer] [Winter, Spring, Autumn, Summer] 0

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

Источник

Динамический list в java

2. ArrayList(int initialCapacity) – объявление списка с указанием размера преимущественно для случаев, когда будет использоваться большое количество данных и в целях оптимизации следует задавать уже большой размер. Например, используется в случаях, когда список увеличивается с каждым вызовом метода в классе. Размер списка растет с нелинейной скоростью и, если заранее известно, что список будет увеличиваться и будет достигать больших размеров (больше 1e3 элементов), оптимально будет задать изначальный размер и резервировать количество мест заранее.

ArrayList employee = new ArrayList<>(100); 

3. ArrayList(Collection c) – объявления списка с уже имеющимся списком, элементы которого были переданы конструктору.

ArrayList cars = new ArrayList<>(Arrays.asList("BMW", "AUDI")); 

🧩☕ Интересные задачи по Java для практики можно найти на нашем телеграм-канале «Библиотека задач по Java»

Добавление элементов

Для того чтобы добавить элемент в список, используется простая функция add . Для этого метода есть разновидности:

1. add(E e) – добавление элемента в конец списка. Это функция является возвращаемой. Если элемент был добавлен в список, то ответ – true , иначе – false .

ArrayList fruits = new ArrayList<>(); // ArrayList() создание списка fruits.add("banana"); // добавление элемента fruits.add("apple"); // добавление элемента for (var fruit: fruits) < System.out.println(fruit); // вывод элементов >//output: // banana // apple 

2. add(int index, E element) – в данном методе добавление элемента происходит в определенную позицию (index), а все последующие элементы двигаются слева направо. Метод эффективен для небольших размеров списка (когда размер списка не более ~100 элементов). В ином случае – если в программе происходит много сдвигов, то лучше использовать LinkedList.

 ArrayList fruits = new ArrayList(); fruits.add("apple"); fruits.add("banana"); fruits.add(1, "watermelon"); // добавляем элемент на 2-ую позицию. for (var fruit : fruits) < System.out.println(fruit); >/*output apple watermelon banana */ 

3. addAll(Collection ) – добавление списка элементов в конец добавляемого списка. То есть, при вызове данного метода в конец списка добавляются все элементы в таком же порядке.

 //список фруктов ArrayList fruits = new ArrayList(); fruits.add("apple"); fruits.add("banana"); fruits.add(1, "watermelon"); //список овощей ArrayList vegetables = new ArrayList<>(); vegetables.add("cucumber"); vegetables.add("carrot"); //список покупок ArrayList groceries = new ArrayList<>(); //добавляем в список покупок овощи и фрукты groceries.addAll(vegetables); groceries.addAll(fruits); for (var item : groceries) < System.out.println(item); >/*output cucumber carrot apple watermelon banana */ 

4. addAll(int index, Collection ) – это смесь добавления списка и также добавления элемента в определенную позицию. В этом методе в позицию index производится добавление всех элементов из списка, а все последующие элементы смещаются направо.

 //список фруктов ArrayList fruits = new ArrayList(); fruits.add("apple"); fruits.add("banana"); fruits.add(1, "watermelon"); //список овощей ArrayList vegetables = new ArrayList<>(); vegetables.add("cucumber"); vegetables.add("carrot"); //список покупок ArrayList groceries = new ArrayList<>(); //добавляем в список покупок овощи и фрукты groceries.addAll(vegetables); groceries.addAll(1, fruits); //добавляем список фруктов на 1-ую позицию списка продуктов //индекс 0, 1, 2, 3, 4 //было - cucumber, carror //стало - cucumber, apple, banana, watermelon, carrot for (var item : groceries) < System.out.println(item); >/*output cucumber apple watermelon banana carrot */ 

Удаление элементов

В ArrayList, существуют методы для удаления элементов. Всего существуют 3 метода для удаления элемента:

1. remove(int index) – удаление осуществляется, используя индекс определенного элемента. То есть, передается порядковый номер элемента и этот элемента удаляется из списка. Не забываем, что индекс начинается с 0.

 //список фруктов ArrayList fruits = new ArrayList(); fruits.add("apple"); fruits.add("banana"); fruits.add("watermelon"); fruits.remove(0); // удаляем первый фрукт for (var fruit : fruits) < System.out.println(fruit); >/* output watermelon banana */ 

2. remove(object o) – метод удаляет первый встретившийся элемент, который равняется переданному объекту в параметрах. Если проще, то метод проходится по всему списку и ищет элемент, который равняется удаляемому объекту и при нахождении удаляет только первый встретившийся.

 //список фруктов ArrayList fruits = new ArrayList(); fruits.add("apple"); fruits.add("banana"); fruits.add("watermelon"); fruits.remove("banana"); // удаляем фрукт банан for (var fruit : fruits) < System.out.println(fruit); >/* output apple watermelon */ 

3. removaAll(Collection c) – данный метод удаляет все элементы, находящиеся в передаваемом списке.

 //список фруктов ArrayList fruits = new ArrayList(); fruits.add("apple"); fruits.add("banana"); fruits.add(1, "watermelon"); ArrayList fruitsToDelete = new ArrayList<>(); fruitsToDelete.add("apple"); fruitsToDelete.add("watermelon"); fruits.removeAll(fruitsToDelete); for (var fruit : fruits) < System.out.println(fruit); >/* output banana */ 

Вспомогательные методы

В Arraylist встречаются различные методы, которые являются вспомогательными при различных условиях:

1. size() – возвращает размер списка.

 //список фруктов ArrayList fruits = new ArrayList(); fruits.add("apple"); fruits.add("banana"); fruits.add(1, "watermelon"); System.out.println(fruits.size()); /* output 3 */ 

2. sort(Comparator c) – происходит сортировка элементов по заданным параметрам Comparator . Есть уже значения по умолчанию у Comparator , которыми можно пользоваться, Comparator.naturalOrder() , а также Comparator.reverseOrder() .

 ArrayList numbers = new ArrayList<>(); numbers.add(1); numbers.add(3); numbers.add(-1); numbers.add(5); //сортирует по возрастанию numbers.sort(Comparator.naturalOrder()); for (var number:numbers) < System.out.print(number + " "); >//переворачивает список в конца numbers.sort(Comparator.reverseOrder()); System.out.println(); for (var number:numbers)

3. toArray() – данный метод превращает список в массив. Он возвращает массив объектов ( Object[] ), но можно вернуть желаемый тип данных и для этого потребуется в метод toArray(Array a) передать уже созданный массив.

 ArrayList numbers = new ArrayList<>(); numbers.add(1); numbers.add(3); numbers.add(-1); numbers.add(5); var numbersArray = numbers.toArray(); for (var number:numbersArray) < System.out.print(number + " "); >System.out.println(); //определения типа Integer[], чтобы в тип данных var numbersArrayDefined = new Integer[numbers.size()]; numbers.toArray(numbersArrayDefined); for (var number: numbersArrayDefined) < System.out.print(number + " "); >//output /* 1 3 -1 5 1 3 -1 5 */ 

4. isEmpty() – проверка списка на наличие элементов. Если список пустой, то возвращает true , в противном случае – false .

 ArrayList numbers = new ArrayList<>(); numbers.add(1); numbers.add(3); numbers.add(-1); numbers.add(5); System.out.println(numbers.isEmpty());//false ArrayList numbersEmpty = new ArrayList<>(); System.out.println(numbersEmpty.isEmpty()); //true 

5. indexOf(Object o) – метод возвращает позицию передаваемого элемента, и, если элемент не был найден, возвращает -1.

 ArrayList fruits = new ArrayList<>(); fruits.add("apple"); fruits.add("banana"); fruits.add("watermelon"); System.out.println(fruits.indexOf("apple")); // 0 System.out.println(fruits.indexOf("banana")); // 1 System.out.println(fruits.indexOf("watermelon")); // 2 

6. clear() – удаляет все элементы из списка.

 ArrayList fruits = new ArrayList<>(); fruits.add("apple"); fruits.add("banana"); fruits.add("watermelon"); fruits.clear(); // очищаем список System.out.println(fruits.isEmpty()); // true 

7. clone() – метод копирует список. После копирования нужно привести к необходимому классу, то есть type casting . Когда список клонируется, создается отдельный независимый объект и удаление родительского списка не влияет на элементы нового списка.

 ArrayList fruits = new ArrayList<>(); fruits.add("apple"); fruits.add("banana"); fruits.add("watermelon"); var fruitsNew = (ArrayList)fruits.clone(); fruits.clear(); // очищаем предыдущий список // для проверки что fruitsNew действительно новый список for (var fruit : fruitsNew) < System.out.println(fruit); >/* output * apple * banana * watermelon * */ 

Также можно прочитать более подробно про все существующие методы ArrayList в документации Oracle по ссылке.

Материалы по теме

Источник

Оцените статью