JavaRush /Java блог /Random /Кофе-брейк #217. Как инициализировать List в Java. 7 прос...

Кофе-брейк #217. Как инициализировать List в Java. 7 простых приемов для повышения производительности в Java: советы и примеры

Статья из группы Random

Как инициализировать List в Java

Источник: FreeCodeCamp В этой статье рассматриваются различные методы инициализации List в Java с примерами практического использования. Кофе-брейк #217. Как инициализировать List в Java. 7 простых приемов для повышения производительности в Java: советы и примеры - 1Одной из основных структур данных в языке Java является список (List). Он позволяет разработчикам хранить набор элементов и управлять ими. Инициализация List в Java — важный этап процесса разработки, поскольку он определяет начальное состояние List и подготавливает его к дальнейшим операциям. Существуют различные способы инициализации List в Java, их выбор зависит от конкретных требований проекта:
  • Использование конструктора ArrayList.
  • Использование метода add().
  • Использование метода Arrays.asList().
  • Использование метода Stream.of().
Давайте подробно рассмотрим эти методы.

Как инициализировать список с помощью конструктора ArrayList

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

ArrayList<Object> list = new ArrayList<Object>();
Конструктор без аргументов создает пустой список (List) с начальной емкостью 10 элементов. Если список превышает эту вместимость, то класс ArrayList автоматически увеличивает вместимость, создавая новый массив большего размера и копируя элементы из старого массива в новый массив. В качестве альтернативы мы можем создать объект ArrayList с начальной вместимостью, используя конструктор с одним целочисленным (integer) аргументом, где capacity начальная емкость списка:

ArrayList<Object> list = new ArrayList<Object>(capacity);
Чтобы инициализировать List со значениями, мы можем использовать конструктор, который принимает Collection в качестве аргумента. В этот конструктор можно передать любой объект коллекции, реализующий интерфейс Collection, например другой ArrayList или LinkedList. Элементы коллекции добавляются к новому ArrayList в том порядке, в котором они появляются в коллекции. Вот пример того, как создать ArrayList и инициализировать его значениями с помощью конструктора, который принимает Collection:

import java.util.ArrayList;
import java.util.Arrays;

public class Example {
    public static void main(String[] args) {
        // создаем массив целых чисел
        Integer[] array = {1, 2, 3, 4, 5};

        // создаем список из массива
        ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(array));

        // печатаем список
        System.out.println(list); // [1, 2, 3, 4, 5]
    }
}
В этом примере мы создаем массив целых чисел, а затем передаем его методу Arrays.asList() для создания объекта List. Затем мы передаем этот объект List конструктору ArrayList, чтобы создать новый ArrayList с теми же элементами, что и исходный массив. И наконец, мы печатаем содержимое списка, используя метод System.out.println().

Как инициализировать List с помощью метода add()

Метод add() широко используется в Java для добавления элементов в коллекцию или список. Этот метод доступен для нескольких типов коллекций в Java, включая List, Set и Map. Метод add() принимает один аргумент — элемент, который необходимо добавить в коллекцию. Когда речь идет о добавлении элементов в vList, метод add() особенно полезен, поскольку списки в Java — это упорядоченные коллекции, которые могут содержать дубликаты. Метод add() можно использовать для добавления элементов в конец списка, что делает его удобным способом инициализации List с некоторыми начальными значениями. Вот пример того, как использовать метод add() для инициализации List в Java:

import java.util.ArrayList;
import java.util.List;

public class ListExample {
    public static void main(String[] args) {
        // создаем новый ArrayList
        List<String> myList = new ArrayList<>();

        // добавляем элементы в список, используя метод the add() 
        myList.add("apple");
        myList.add("banana");
        myList.add("cherry");

        // печатаем содержимое списка
        System.out.println(myList);
    }
}
В данном примере мы сначала создаем новый список ArrayList с именем myList. Затем мы используем метод add() для добавления трех строк ("apple", "banana" и "cherry") в конец списка. Затем мы печатаем содержимое списка, используя метод System.out.println(). Когда мы запустим программу, вывод будет таким:
[apple, banana, cherry]

Как инициализировать List с помощью метода Arrays.asList()

Встроенный в Java метод Arrays.asList() преобразует массив в список. Этот метод принимает массив в качестве аргумента и возвращает объект List. Объект, возвращаемый методом Arrays.asList(), представляет собой список фиксированного размера, что означает, что мы не можем добавлять или удалять элементы из него. Чтобы использовать метод Arrays.asList() для инициализации List в Java, мы должны выполнить следующие шаги: Сначала объявим массив элементов, которыми мы хотим инициализировать список. Например, предположим, что мы хотим инициализировать список тремя элементами: "apple", "banana" и "orange". Здесь мы можем объявить массив так:

String[] fruits = {"apple", "banana", "orange"};
Затем вызываем метод Arrays.asList() и передаем массив в качестве аргумента. Это вернет объект List, содержащий элементы массива.

List<String> fruitList = Arrays.asList(fruits);
Теперь мы можем использовать объект fruitList для доступа к элементам списка. Например, мы можем пройтись по списку и распечатать каждый элемент:

for (String fruit : fruitList) {
    System.out.println(fruit);
}
Вывод:
apple banana orange
Важно отметить, что метод Arrays.asList() не создает новый объект List, а возвращает представление исходного массива в виде объекта List. Это означает, что если мы изменим исходный массив, изменения также будут отражены в объекте List. Например:

fruits[0] = "pear";
System.out.println(fruitList.get(0)); // Вывод: pear
В приведенном выше примере мы изменили первый элемент массива fruits на "pear". Когда мы обращаемся к первому элементу объекта fruitList, мы также получаем "pear", потому что fruitList это просто представление массива fruits.

Как инициализировать List с помощью метода Stream.of()

Stream.of() — это удобный метод, предоставляемый Java 8 и более поздними версиями в пакете java.util.stream. Он используется для создания потока элементов любого типа, включая примитивные типы, массивы и объекты. Этот метод принимает один или несколько аргументов и возвращает поток, состоящий из этих аргументов. Синтаксис метода Stream.of():

Stream<T> stream = Stream.of(t1, t2, t3, ..., tn);
Здесь T — тип элементов в потоке, а t1 и далее до tn — элементы, которые должны быть включены в поток. Чтобы инициализировать List в Java с помощью метода Stream.of(), нужно выполнить следующие действия:
  1. Сначала импортируйте пакет java.util.stream.

  2. Затем с помощью конструктора создайте список нужного типа ArrayList, например:

    
    List<String> myList = new ArrayList<>();
    
  3. Инициализируйте список с помощью метода Stream.of(), передав нужные элементы в качестве аргументов, а затем используйте метод collect() для сбора элементов потока в список, например:

    
    myList = Stream.of("Apple", "Banana", "Cherry", "Date")
                  .collect(Collectors.toList());
    
  4. Затем мы можем распечатать список, чтобы проверить его содержимое.

    
    System.out.println(myList);
    

    Вывод:

    [Apple, Banana, Cherry, Date]

Заключение

Инициализация List в Java — довольно обычная задача в программировании, и существует несколько способов ее выполнения. Следуя шагам, описанным в этой статье, мы можем легко создать и инициализировать List с нужными элементами, используя метод Stream.of(). Этот подход является кратким и гибким, и он может быть особенно полезен, когда нам нужно инициализировать список с небольшим количеством элементов. Удачного кодирования!

7 простых приемов для повышения производительности в Java: советы и примеры

Источник: Medium Вашему вниманию предлагается подборка из семи практических советов, соблюдение которых поможет повысить производительность работы Java-разработчика. Производительность Java-приложений можно повысить, следуя нескольким простым советам.

1. Используйте примитивные типы вместо объектов:


// Плохо: использование объекта Integer 
Integer count = 0;
for (int i = 0; i < 1000000; i++) {
    count++;
}

// Хорошо: использование примитива int
int count = 0;
for (int i = 0; i < 1000000; i++) {
    count++;
}

2. Избегайте создания ненужных объектов:


// Плохо: использование конкатенации строк с помощью '+' 
String str = "";
for (int i = 0; i < 10000; i++) {
    str += i;
}

// Хорошо: использование StringBuilder 
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10000; i++) {
    sb.append(i);
}
String str = sb.toString();

3. Используйте правильную структуру данных:


// Плохо: использование List для частого поиска
List<String> names = new ArrayList<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
// ...
if (names.contains("Charlie")) {
    // ...
}

// Хорошо: использование HashSet для частого поиска
Set<String> names = new HashSet<>();
names.add("Alice");
names.add("Bob");
names.add("Charlie");
// ...
if (names.contains("Charlie")) {
    // ...
}

4. Минимизируйте вызовы методов:


// Плохо: вызов метода внутри цикла 
for (int i = 0; i < 1000000; i++) {
    doSomething(i);
}

// Хорошо: выносим метод за пределы цикла
for (int i = 0; i < 1000000; i++) {
    // ...
}
doSomething(i);

5. Используйте статические (static) и финальные (final) модификаторы:


// Плохо: создание ненужных экземпляров объектов 
public class MyClass {
    private int value;
    public void setValue(int value) {
        this.value = value;
    }
    public int getValue() {
        return value;
    }
}
MyClass obj = new MyClass();
obj.setValue(10);
int value = obj.getValue();

// Хорошо: использование статических и финальных модификаторов
public class MyClass {
    private static final int DEFAULT_VALUE = 0;
    private final int value;
    public MyClass(int value) {
        this.value = value;
    }
    public int getValue() {
        return value;
    }
}
MyClass obj = new MyClass(10);
int value = obj.getValue();

6. Используйте соответствующий ситуации алгоритм:


// Плохо: использовать линейный поиск для большой коллекции
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// ...
int target = 7;
for (int i = 0; i < nums.size(); i++) {
    if (nums.get(i) == target) {
        // ...
    }
}
// Хорошо: использование бинарного поиска для большой коллекции
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
// ...
int target = 7;
int index = Collections.binarySearch(nums, target);
if (index >= 0) {
    // ...
}

7. Оптимизируйте циклы:


// Плохо: вызов метода внутри цикла
for (int i = 0; i< 1000000; i++) {
    String str = getString(i);
    // ...
}

// Хорошо: минимизация вызовов методов в цикле
for (int i = 0; i < 1000000; i++) { 
    String str = "String " + i; 
    // ... 
}
Это были лишь несколько простых приемов в Java, которые могут повысить вашу производительность. Имейте в виду, что оптимизация производительности может быть сложной задачей, и разработчику часто приходится анализировать свой код для выявления узких мест в производительности.
Комментарии (5)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Alina Уровень 30
19 апреля 2023
У меня вопрос к 4 про "вынос цикла". Там же i объявлена в самом лупе. Разве будет работать метод с этой переменной, если вынести его за приделы цикла?
Anonymous #3073846 Уровень 32
18 апреля 2023
подскжаите, в 7 примере не понял, зачем добавляем слово "String" перед i. не рациональнее ли с точки зрения импользования ресурсов памяти написать String str = (String) i; ?