Рубрики
Без рубрики

Различные способы создания списка в Java

Списки действительно важны. Они добавляют гибкость для автоматического изменения размера при добавлении или удалении… С тегами java, новички, массивы, codenewbie.

Списки действительно важны. Они добавляют гибкость для автоматического изменения размера при добавлении или удалении элемента. Это особенно удобно, когда вы принимаете входные данные от пользователя в какой-либо форме, и вы не знаете, сколько объектов вам нужно будет сохранить в каком-либо массиве. Поскольку массивы имеют фиксированный размер при инициализации, если бы мы захотели изменить их размер, нам нужно было бы создать новый массив большего размера и скопировать элементы. Это вполне возможно, но тип списка делает эту работу за вас.

Итак, мы знаем почему, давайте посмотрим, как мы можем создать список множеством способов.

ArrayList<>()

Первый тип списка, который большинство из нас будет использовать, – это ArrayList . Он сохраняет элементы упорядоченными в той последовательности, в которой они были введены. Самый простой способ объявить и инициализировать этот тип списка со строковыми элементами выглядит следующим образом;

List list = new ArrayList<>();
list.add("Here");
list.add("we");
list.add("add");
list.add("elements");

Этот метод создания и добавления элементов особенно полезен, если мы перебираем какую-либо другую структуру данных или входные данные, получая элементы до тех пор, пока ввод не прекратится. Например, с помощью Scanner и стандартного потока ввода в вашей IDE;

Scanner scan = new Scanner(System.in);
// user input = 1 2 3 4 e
while(scan.hasNextInt()) { // returns true if element is an int
    list.add(scan.nextInt());
}
// list = {1,2,3,4}

Массивы.asList()

Это отличный способ получить неизвестное количество элементов в наш список, но что, если у нас уже есть массив, который нам нужно преобразовать в список? Для этого есть метод app utility! Из класса Arrays ;

String[] strings = new String[]{"Here's", "some", "strings",
    "in a", "string array"};
List asList = Arrays.asList(strings);

Вуаля, наша Строка[] теперь представляет собой список. Мы можем добавлять к нему или удалять элементы по своему усмотрению. Имейте в виду, однако, что массив, который вы вводите в качестве аргумента для Arrays.asList(array) , берется и используется в качестве основы для списка (список поддерживается массивом). Любые изменения в исходном массиве будут отражены в списке. Это также верно и наоборот, если вы измените список, это будет отражено в массиве.

strings[1] = "altered the string array"; // change the element at 
                                         // index 1
System.out.println(asList); // [Here's, altered the string array, 
                            // strings, in a, string array]

Так что просто будьте осторожны с исходным массивом, иначе вы можете получить некоторые неожиданные результаты.

Список.из()

Следующий способ быстрого создания списка – это List.of() . Это статический метод из интерфейса List , статический означает, что мы можем вызывать метод без экземпляра объекта, например;

Person personInstance = new Person();
int age = personInstance.getAge(); // instance method

double pi = Math.PI; // static field from the Math class

Недостатком (или преимуществом) List.of() является то, что он возвращает неизменяемый список. Это означает, что вы не можете добавлять или удалять элементы. Что-то, что нужно иметь в виду, и в зависимости от вашей ситуации это может соответствовать вашим потребностям.

List listOfList = List.of("Can't", "change", "this", 
    "list");
listOfList.add("add me please"); // throws 
                                 // UnsupportedOperationException

Однако вы должны знать, что внутреннее состояние элемента все еще может быть изменено. То есть, если бы у вас был список Person() s, вы могли бы вызвать оператор –

listOf.get(1).setAge(32);

без каких-либо исключений.

Массивы.поток()

Последний способ, который я предложу для создания вашего списка, – это использование потоков. Потоки были добавлены в Java в версии 8, в 2014 году. Это большая тема, и ее стоит изучить, поскольку они значительно упрощают работу со структурами данных, как только вы освоитесь с ними. По сути, вы отправляете группу объектов на одном конце и выполняете различные операции над этой группой в середине (промежуточные операции), затем снова собираете их все в конце (терминальная операция) и упаковываете их обратно в структуру данных по своему усмотрению.

List streamList = 
    Arrays.stream(strings).collect(Collectors.toList());

Это кажется излишним по сравнению с вышеупомянутыми методами создания списка, но некоторые промежуточные операции с потоками – это filter() , где мы могли бы удалить строки, начинающиеся с "s" например, skip(n) который пропускает первые n элементов, или sorted() будет сортировать элементы потока в соответствии с его естественным порядком. Как я уже сказал, идите и посмотрите на потоки, если хотите, в их использовании есть много хороших вещей и полезных преимуществ.

Вот и все, мы закончили. Я надеюсь, вы нашли что-то полезное, я знаю, что мне понравилось писать это и читать документы, чтобы проверить мои факты. Если есть что-то, что вы хотели бы добавить (к моему первому Dev.to пост, не меньше!) пожалуйста, оставьте комментарий ниже.

Спасибо за чтение!

Оригинал: “https://dev.to/siaust/different-ways-to-make-a-list-in-java-2lb0”