Как инициализировать ArrayList в Java
Источник: FreeCodeCamp Из этой статьи вы узнаете, как объявить и инициализировать ArrayList в Java. Также вы ознакомитесь с различными встроенными методами, которые можно использовать для добавления, доступа, изменения и удаления элементов в ArrayList.
Как объявить ArrayList со значениями в Java
Объявить ArrayList в Java можно следующим способом:
import java.util.ArrayList;
public class ArrayListTut {
public static void main(String[] args) {
ArrayList<String> people = new ArrayList<>();
}
}
Перед тем, как использовать ArrayList, вы должны сначала импортировать его из одноименного класса: import java.util.ArrayList;.
После этого вы можете создать новый объект ArrayList. В приведенном выше коде мы создали такой объект под именем people.
Обратите внимание, что тип данных ArrayList указывается в угловых скобках: ArrayList<String>.
Несмотря на то, что мы создали объект ArrayList, в нем пока нет элементов. Далее вы узнаете, как добавлять к нему элементы.
Учтите, что вы можете создать ArrayList со значениями/элементами в точке объявления, используя метод add в блоке инициализатора:
import java.util.ArrayList;
public class ArrayListTut {
public static void main(String[] args) {
ArrayList<String> people = new ArrayList<>() {{
add("John");
add("Jane");
add("Doe");
}};
System.out.println(people);
// [John, Jane, Doe]
}
}
Как добавить элементы в ArrayList
Для добавления элементов в ArrayList необходимо использовать метод add().
import java.util.ArrayList;
public class ArrayListTut {
public static void main(String[] args) {
ArrayList<String> people = new ArrayList<>();
people.add("John");
people.add("Jane");
people.add("Doe");
System.out.println(people);
// [John, Jane, Doe]
}
}
В данном коде мы объявили ArrayList под названием people без каких-либо элементов. С помощью точки и метода add() мы добавили в people элементы: people.add("John").
Как получить доступ к элементам в ArrayList
Получить доступ к элементам в Java ArrayList можно, используя индекс элемента. Он будет передан в качестве параметра метода get(), примерно вот так:
import java.util.ArrayList;
public class ArrayListTut {
public static void main(String[] args) {
ArrayList<String> people = new ArrayList<>();
people.add("John");
people.add("Jane");
people.add("Doe");
System.out.println(people.get(0));
// John
}
}
В этом коде people.get(0) получает первый элемент — "John".
Обратите внимание, что первый элемент имеет индекс 0, второй — индекс 1 и так далее.
Как изменить элементы в ArrayList
Вы можете изменить или модифицировать значение элемента в ArrayList с помощью метода set(). Метод set() принимает два параметра — индекс изменяемого элемента и новое значение, которое будет присвоено этому индексу. Перед вами пример:
import java.util.ArrayList;
public class ArrayListTut {
public static void main(String[] args) {
ArrayList<String> people = new ArrayList<>();
people.add("John");
people.add("Jane");
people.add("Doe");
people.set(1, "Jade");
System.out.println(people);
// [John, Jade, Doe]
}
}
Здесь мы изменили второй элемент с "Jane" на "Jade", используя его индекс: people.set(1, "Jade").
Как удалить элементы в ArrayList
Вы можете удалить элемент, используя метод remove(). Этот метод принимает в качестве параметра индекс удаляемого элемента. Давайте взглянем на пример кода:
import java.util.ArrayList;
public class ArrayListTut {
public static void main(String[] args) {
ArrayList<String> people = new ArrayList<>();
people.add("John");
people.add("Jane");
people.add("Doe");
people.remove(2);
System.out.println(people);
// [John, Jane]
}
}
Используя метод remove(), мы удалили третий элемент в коллекции с помощью индекса элемента: people.remove(2);.
Заключение
В этой статье мы говорили о структуре данных Java ArrayList. Она используется для хранения набора переменных и дает разработчику больше контроля над элементами в коллекции благодаря наличию динамического размера, который не фиксируется при объявлении, как массивы Java. Мы также узнали, как объявить и инициализировать объект ArrayList со значениями, и какие существуют методы добавления, доступа, изменения и удаления элементов в ArrayList.Как создать неизменяемый класс в Java
Источник: Medium Благодаря этому руководству вы узнаете, что такое неизменяемость (неизменность) в Java и как создать неизменяемый класс в Java. Неизменяемость (Immutability) в Java — это состояние, в котором значение объектов нельзя изменить после их инициализации. В Java примитивные классы float, int, long, double, все устаревшие классы, классы-оболочки, классы String и другие являются неизменяемыми.- Неизменяемый класс хорошо применять для кэширования, поскольку вам не нужно беспокоиться об изменении значения.
- Неизменяемый класс по своей сути потокобезопасен, поэтому вам не нужно беспокоиться о безопасности потоков в многопоточных средах.
String testImmutability = "String Not Immutable";
testImmutability.concat("---");
System.out.println(testImmutability);
// Это будет успешно объединено, так как будет создан новый объект String
String concat = testImmutability.concat("---");
System.out.println(concat);
// Вывод
String Not Immutable
String Not Immutable---
Этапы создания собственного неизменяемого класса:- Объявите класс как final, чтобы его нельзя было расширить.
- Сделайте все поля private, чтобы прямой доступ был запрещен.
- Не предоставляйте методы setter для переменных.
- Сделайте все изменяемые поля final, чтобы значение поля можно было назначить только один раз.
- Инициализируйте все поля с помощью метода конструктора, выполняющего глубокое копирование.
- Выполните клонирование объектов в методах getter, чтобы возвращать копию, а не реальную ссылку на объект.
final class ImmutableClassExample {
private final Map<String, String> dataMap;
private final String name;
private final String id;
// Делаем глубокую копию в конструкторе
public ImmutableClassExample(String name, String id, Map<String, String> dataMap) {
this.name = name;
this.id = id;
Map<String, String> tempMap = new HashMap<>();
for (Map.Entry<String, String> entry : dataMap.entrySet()) {
tempMap.put(entry.getKey(), entry.getValue());
}
this.dataMap = tempMap;
}
// Делаем глубокую копию в геттере
public Map<String, String> getDataMap() {
Map<String, String> tempMap = new HashMap<>();
for (Map.Entry<String, String> entry : dataMap.entrySet()) {
tempMap.put(entry.getKey(), entry.getValue());
}
return tempMap;
}
public String getName() {
return name;
}
public String getId() {
return id;
}
}
public class Test {
public static void main(String args[]) {
Map<String, String> map = new HashMap<>();
map.put("1", "One");
map.put("2", "Two");
ImmutableClassExample s = new ImmutableClassExample("ABC", "101", map);
System.out.println(s.getName());
System.out.println(s.getId());
System.out.println(s.getDataMap());
map.put("3", "third");
// Не изменится из-за глубокого копирования в конструкторе
System.out.println(s.getDataMap());
s.getDataMap().put("4", "fourth");
// Раскомментирование следующего кода вызовет ошибку, так как мы пытаемся получить доступ к члену private
// s.id = "4";
}
}
// Раскомментирование следующего кода вызовет ошибку, так как мы пытаемся наследовать класс final); } } */
/*
class CheckInheritance extends ImmutableClassExample{
public CheckInheritance(String name, String id, Map<String, String> dataMap) {
super(name, id, dataMap);
}
}
*/
Вывод:
ABC
101
{1=One, 2=Two}
{1=One, 2=Two}
Помните, что в коде не должно быть методов setter, чтобы не было возможности изменить данные.
Интересные факты
Метод создания неизменяемого класса в Java широко используется в версиях до Java 14. Проблема с приведенным выше решением заключается в том, что оно создает много шаблонного кода и допускает ошибки. В Java 14 появились записи (Records), которые можно использовать для создания неизменяемых объектов “только для чтения”. Записи представляют собой неизменяемую структуру данных, поэтому они более предпочтительны и должны использоваться вместо создания неизменяемых классов. Одним из важных аспектов записей является то, что поля final не могут быть перезаписаны с помощью отражения (reflection). Вот как выглядит приведенный ранее пример с использованием записей:
record ImmutableClassExample(String name, String id, Map<String, String> dataMap) {
}
Надеюсь, эта публикация вам поможет в вашей работе! Удачного кодирования!
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ