Share This
Связаться со мной
Крути в низ
Categories
//Списочный массив в Java

Списочный массив в Java

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

spisochnyj massiv v java ada67ab - Списочный массив в Java

Знакомство с ArrayList

ArrayList – это реализация динамического использования массива в Java. При использовании массива часто приходится задумываться о требуемом размере, а ArrayList является списком, который увеличивается и уменьшается при необходимости. Этот класс является имплементацией интерфейса (interface) List из Collection Framework, который расположен в пакете java.utils. В самом классе есть базовые методы добавления и удаления, а также методы, которые возвращают размер списка; очистка по индексу или же по значению и т. д.

Короче

говоря, ArrayList является динамическим массивом, который сам определяет размер. При этом нет необходимости задавать какие-то конфигурации.

Создание объекта

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

1. ArrayList() – простое объявление списка и наиболее часто используемое. Объявляется данный список обычно в конструкторе, который будет использоваться внутри объекта, например, имплементация кэширования и временного хранения в памяти. Является самым простым и удобным объявлением списочного массива в Java.

         ArrayList<String> fruits = new ArrayList<>(); // ArrayList() создание списка     

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

         ArrayList<String> employee = new ArrayList<>(100);     

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

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

Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека джависта» Интересно, перейти к каналу

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

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

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

         ArrayList<String> 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<String> fruits = new ArrayList<String>();         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<String> fruits = new ArrayList<String>();         fruits.add("apple");         fruits.add("banana");         fruits.add(1, "watermelon");           //список овощей         ArrayList<String> vegetables = new ArrayList<>();         vegetables.add("cucumber");         vegetables.add("carrot");          //список покупок         ArrayList<String> 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<String> fruits = new ArrayList<String>();         fruits.add("apple");         fruits.add("banana");         fruits.add(1, "watermelon");          //список овощей         ArrayList<String> vegetables = new ArrayList<>();         vegetables.add("cucumber");         vegetables.add("carrot");          //список покупок         ArrayList<String> 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<String> fruits = new ArrayList<String>();         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<String> fruits = new ArrayList<String>();         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<String> fruits = new ArrayList<String>();         fruits.add("apple");         fruits.add("banana");         fruits.add(1, "watermelon");          ArrayList<String> 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<String> fruits = new ArrayList<String>();         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<Integer> 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) {             System.out.print(number + " ");         }     

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

         	ArrayList<Integer> 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<Integer> numbers = new ArrayList<>();         numbers.add(1);         numbers.add(3);         numbers.add(-1);         numbers.add(5);          System.out.println(numbers.isEmpty());//false          ArrayList<Integer> numbersEmpty = new ArrayList<>();         System.out.println(numbersEmpty.isEmpty()); //true     

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

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

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

***

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

  • ☕ Учебник по Java: cтатический и динамический полиморфизм
  • ☕ Разбираем на простых примерах: наследование в Java
  • ☕ ТОП-20 бесплатных учебных курсов по Java для новичков

  • 1 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Свежие комментарии

    Рубрики

    About Author 01.

    blank
    Roman Spiridonov

    Моя специальность - Back-end Developer, Software Engineer Python. Мне 39 лет, я работаю в области информационных технологий более 5 лет. Опыт программирования на Python более 3 лет. На Django более 2 лет.

    Categories 05.

    © Speccy 2022 / All rights reserved

    Связаться со мной
    Close