Класс ArrayList . Методы изменяющие данные в массиве
Пример. В примере формируется массив квадратов чисел от 1 до 10. Для добавления числа в конец массива используется метод add() .
import java.util.*; public class TrainCollections < public static void main(String[] args) < // Метод addAll() - добавить элемент в конец массива // 1. Создать массив из чисел типа Integer ArrayList AI = new ArrayList(); // 2. Добавить в массив квадраты чисел от 1 до 10 for (int i=1; 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(Collectionextends E>) addAll(int index, Collectionextends E>)
- E – тип элементов массива (коллекции);
- index – позиция, с которой происходит вставка.
Пример. Демонстрируется использование метода addAll() для массива целых чисел.
import java.util.*; public class TrainCollections < public static void main(String[] args) < // Метод addAll() - добавить коллекцию к массиву // 1. Создать массив из 5 чисел типа Float ArrayList 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 color: #008000;"> // 2. Создать другой массив из 3 чисел типа Float ArrayList AI2 = new ArrayList(); for (int i=1; iout.println("AI2 color: #008000;"> // 3. Добавить массив AI2 в конец массива AI AI.addAll(AI2); System.out.println("AI + AI2 color: #008000;"> // 4. Записать массив AI2 в массив AI начиная с позиции 2 AI.addAll(2, AI2); System.out.println("AI[2] + AI2 color: #333300;">⇑3. Метод clear(). Очистить массив
Метод clear() предназначен для очищения массива. Согласно документации общая форма объявления метода следующая
public void clear();Пример. В примере создается коллекция из символов-разделителей.
import java.util.*; public class TrainCollections < public static void main(String[] args) < // Метод clear() - очистить коллекцию // 1. Создать коллекцию из разделительных символов в предложении ArrayList 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 AL = new ArrayList(); 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; iout.print(AL.get(i) + " "); System.out.println(); // 3. Удалить элемент в позиции 2, который имеет значение 7.2 AL.remove(2); // 4. Вывести измененную коллекцию System.out.print("AL => "); for (int i=0; iout.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 AL = new ArrayList(); 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; iout.print(AL.get(i) + " "); System.out.println(); // 3. Создать коллекцию чисел, которые нужно удалить ArrayList AL2 = new ArrayList(); // удалить все числа 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; iout.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(Predicatesuper 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 AL = new ArrayList(); 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; iout.print(AL.get(i) + " "); System.out.println(); // 3. Объявить ссылку на интерфейс Predicate Predicate 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; iout.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 operator);
- operator – лямбда-выражение, определяющее операцию над каждым элементом последовательности. Лямбда-выражение формируется с помощью функционального интерфейса UnaryOperator .
Пример. В примере создается массив целых чисел. Затем каждый элемент массива умножается на 3 с помощью метода replaceAll() . Для выполнения вычисления формируется ссылка на подходящее лямбда-выражение.
import java.util.*; import java.util.function.*; public class TrainCollections < public static void main(String[] args) < // Метод replaceAll() - изменить значение элементов исходного массива // 1. Создать коллекцию целых чисел ArrayList AL = new ArrayList(); AL.add(2); AL.add(3); AL.add(2); AL.add(4); AL.add(7); AL.add(3); // 2. Вывести коллекцию с помощью итератора Iterator it = AL.iterator(); System.out.print("AL => "); while (it.hasNext()) System.out.print(it.next()+" "); System.out.println(); // 3. Сформировать лямбда-выражение, которое умножает элемент на 3 UnaryOperator 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 AL = new ArrayList(); AL.add("a"); AL.add("b"); AL.add("c"); // 2. Вывести исходный массив с помощью итератора Iterator 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 color: #008000;"> // 5. Вывести измененный массив System.out.print("AL => "); for (int i=0; iout.print(AL.get(i) + " "); System.out.println(); > >
Результат выполнения программы
AL => a b c oldValue = b AL => a bbb c
9. Метод sort() . Отсортировать элементы массива
С помощью метода sort() можно сортировать элементы массива. Общая форма объявления метода следующая
public void sort(Comparatorsuper 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 AL = new ArrayList(); AL.add("jklm"); AL.add("abcd"); AL.add("elsd"); AL.add("lkls"); AL.add("azsd"); // 2. Вывести исходный массив Iterator 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; iout.print(AL.get(i) + " "); System.out.println(); > >
Результат выполнения программы
AL => jklm abcd elsd lkls azsd AL => abcd azsd elsd jklm lkls
Связанные темы
- Класс ArrayList . Динамический массив. Общие сведения. Создание массива
- Методы, определяющие информацию об элементах массива. Методы get() , contains() , containsAll() , indexOf() , lastIndexOf() , iterator() , listIterator()
- Методы определяющие общие характеристики массива. Методы ensureCapacity() , isEmpty() , size() , trimToSize()
- Методы преобразующие массив в целом. Методы clone() , sublist() , toArray() , retainAll()
ArrayList — Java: Списки
Наиболее часто используемая коллекция в Java – это список элементов с произвольным доступом. Такой список во многом напоминает массив, но с возможностью динамического добавления элементов.
Списки в Java представлены набором классов, реализующий интерфейс List , в котором описаны общие методы для работы со списками, такими как проверка на существование, добавление, извлечение, замена и другими.
Сами классы, в первую очередь, отличаются друг от друга способом организации (структурой данных) внутри себя. Это происходит из-за того, что не существует универсально эффективного способа создать динамический список. Создатели языка Java решили предложить программистам набор разных реализаций, которые программисты должны выбирать в зависимости от того, какая реализация окажется наиболее эффективной для их ситуации. На практике такое происходит не часто и в большинстве случаев используется ArrayList , который мы и рассмотрим в этом уроке.
import java.util.ArrayList; var items = new ArrayListString>(); items.add("Sun"); // Добавляется под индексом 0 items.add("Mars"); // Добавляется под индексом 1 System.out.println(items); // => [Sun, Mars] // Проверка вхождения items.contains("Sun"); // true items.contains("sun"); // false // Извлечение по индексу items.get(0); // Sun items.get(1); // Mars items.size(); // 2
В этом примере мы создали пустую коллекцию, в которую добавили два элемента с помощью метода add() , распечатали на экран и дальше провели набор типовых действий:
- contains() - проверяет наличие элемента в коллекции.
- get() - возвращает элемент по его индексу. Индексация, как и в массивах, начинается с нуля. Обращение к несуществующему индексу приводит к исключению.
- size() возвращает количество элементов.
Комбинируя эти методы, можно получить последний элемент в коллекции:
// Получение последнего элемента items.get(items.size() - 1); // Mars
В коде используется новый для нас синтаксис с угловыми скобками ArrayList . Технически это называется дженериком, но проходить мы их будем позже, так как это довольно хитрая концепция. Сейчас же просто запомните, что коллекции – это контейнеры элементов одного типа, поэтому в коллекциях всегда нужно указывать то, что будет внутри них хранится. Вот несколько примеров:
var items = new ArrayListInteger>(); items.add(100); items.add(200); System.out.println(items); // [100, 200] // Предположим что у нас есть класс User var users = new ArrayListUser>(); users.add(new User(/* параметры */));
Кроме добавления элементов, их можно изменять и удалять. Метод set() заменяет элемент списка по указанному индексу на новый:
var items = new ArrayListString>(); items.add("hexlet"); items.add("youtube"); items.set(1, "udemy"); System.out.println(items); // => [hexlet, udemy]
Метод remove() удаляет элемент списка на основе его индекса:
var items = new ArrayListString>(); items.add("hexlet"); items.add("youtube"); items.remove(0); System.out.println(items); // => [youtube]
Если у списка есть начальный набор элементов и он достаточно большой, то их можно указать сразу с помощью метода List.of() . Единственное нужно учитывать, что List.of() создает неизменяемый список, то есть его элементы можно использовать, но изменять сам список нельзя. Чтобы добавить возможность его изменения, нужно выполнить его преобразование в ArrayList .
import java.util.List; import java.util.ArrayList; // Неизменяемый список var fixedItems = List.of("Sun", "Mars", /* еще множество элементов */); var items = new ArrayList<>(fixedItems);
В таком случае Java выводит тип самостоятельно на основе типа первого параметра в List.of() . То же самое происходит и в ArrayList .
Apache Commons Collections
Стандартная библиотека предоставляет множество полезных методов для работы со списками, но даже их недостаточно для всех возникающих ситуаций. Поэтому полезно знать про библиотеку commons-collections4 , в которой содержится огромное количество полезных методов на все случаи жизни. Мы будем использовать эту библиотеку как в этом, так и в последующих курсах.
import org.apache.commons.collections4.CollectionUtils; var items = new ArrayListString>();
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Как в arraylist заменить элемент
А как создать лист, не указав класс внутренних объектов? Например мне надо написать метод универсальный что для int что для String.
Дмитрий Уровень 29
9 марта 2022
Вероятно, в предложении перед пунктом с описанием метода get(int index), указали неверно метод - должен быть accept(), по факту action().
Рустем Уровень 24
10 августа 2021
почему при попытке клонирования как в статье, получаю clone() has protected access in java.lang.Object ? или там какие-то действия за кадром остались (при этом пробовал и чтобы класс имплементировал Clonable и проброс ошибки throws CloneNotSupportedException) ?
Steve Stifler Уровень 14
1 июня 2021
Объясните пожалуйста: "add(E e) Добавляет новый элемент в конец списка. Возвращает boolean-значение.". Куда оно возвращает значение? Оно же просто добавляет элемент! Часто вижу, что что-то возвращается, но не могу это понять и представить в голове, как это работает?
Виктор Уровень 20 Expert
26 сентября 2020
Спасибо, отличная статья, доступно всё изложено и помогает решить соответствующие задачи. Законспектировал к себе на канал : ) -- Канал в телеге про Java и Android, в котором есть книги для скачивания, статьи, видеоуроки, чат для обмена знаниями и моральной поддержки : ) Давайте учиться вместе: @LetsCodeIt p. s. Мой личный телеграм канал вкатывальщика в прогерство: @SefoNotasi
19 мая 2020
Сортировка списка по заданному правилу. Правило сортировки представляет собой реализованный интерфейс Comparator с переопределенным методом compareTo(). А я думаю, что речь идёт об интерфейсе Comparable. Все встроенные типы данных поддерживают этот интерфейс. Давайте откроем класс java.lang.Integer. Мы видим, что этот класс реализует интерфейс java.util.Comparable. Вот доказательство: public final class Integer extends Number implements Comparable
Замена элемента в ArrayList


Добавление нового элемента в ArrayList
Добрый день, форумчане! Я новичок в Java, и вот при написании кода столкнулся с такой проблемой.
Замена ArrayList на HashSet
Как заменить ArrayList на HashSet? Не могу понять, что еще нужно менять и вообще, что надо менять.
Замена местами кнопок в ArrayList JavaSwing
Всем здравствуйте. делаю игру пятнашки на java Swing. Создаю ArrayList<JButton> туда заношу.
Использование элемента из ArrayList
Здравствуйте. Изучаю Java. Надо сделать карточную игру "Дурак" на графическом интерфейсе. В ходе.
364 / 251 / 113
Регистрация: 07.10.2017
Сообщений: 1,330
list.set()
2674 / 1993 / 495
Регистрация: 17.02.2014
Сообщений: 9,356

Сообщение было отмечено SouthBoss как решение
Решение
SouthBoss,
1 2 3 4 5 6 7 8 9
public static void main(String[] args) { ArrayListString> strings = new ArrayList<>(); strings.add("1"); strings.add("2"); strings.add("1"); System.out.println(strings); strings.set(2, "3"); System.out.println(strings); }
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Добавление элемента в коллекцию ArrayList
Всем привет. Возник такой вопрос. Есть две коллекции oldCollection и newCollection(код снизу). В.

ArrayList удаление элемента
Как удалить элемент из списка Integer? Почему то нет метода remove().
Вставка элемента внутрь Arraylist
Здравствуйте. Задача кода такова, чтобы при нахождении в Arraylist'е определенного символа(в данном.

Удаление элемента из ArrayList
Доброго времени суток, уважаемые форумчане! Возникла проблема в процессе написания одного.
Нахождение минимального и максимального элемента ArrayList
Суть задачи такова - имеется массив элементов, в котором нужно поменять местами минимальное и.
Или воспользуйтесь поиском по форуму: