Преобразование массива в список в Java
В этом посте будет обсуждаться, как преобразовать массив в список, используя простые коллекции Java, Guava и Apache Commons.
В Java есть две реализации списков общего назначения: ArrayList а также LinkedList . Этот пост будет использовать ArrayList , который предлагает постоянный позиционный доступ и просто быстрый.
1. Наивное решение
Наивное решение состоит в том, чтобы создать пустой список и поместить в него каждый элемент указанного массива.
Create ArrayList from array
How do I convert this array into an object of type ArrayList<Element> ?
42 Answers 42
The simplest answer is to do:
This will work fine. But some caveats:
- The list returned from asList has fixed size. So, if you want to be able to add or remove elements from the returned list in your code, you’ll need to wrap it in a new ArrayList . Otherwise you’ll get an UnsupportedOperationException .
- The list returned from asList() is backed by the original array. If you modify the original array, the list will be modified as well. This may be surprising.
(old thread, but just 2 cents as none mention Guava or other libs and some other details)
If You Can, Use Guava
It’s worth pointing out the Guava way, which greatly simplifies these shenanigans:
Usage
For an Immutable List
Use the ImmutableList class and its of() and copyOf() factory methods (elements can’t be null) :
For A Mutable List
Use the Lists class and its newArrayList() factory methods:
Please also note the similar methods for other data structures in other classes, for instance in Sets .
Why Guava?
The main attraction could be to reduce the clutter due to generics for type-safety, as the use of the Guava factory methods allow the types to be inferred most of the time. However, this argument holds less water since Java 7 arrived with the new diamond operator.
But it’s not the only reason (and Java 7 isn’t everywhere yet): the shorthand syntax is also very handy, and the methods initializers, as seen above, allow to write more expressive code. You do in one Guava call what takes 2 with the current Java Collections.
Как преобразовать массив Java в ArrayList
В этом уроке мы рассмотрим множество примеров того, как преобразовать массив Java в список массивов, указав на лучшие методы.
- Автор записи
Вступление
В этом уроке мы преобразуем массив в более универсальный Список массивов на Java.
- Массивы.asList()
- новый ArrayList<>(Arrays.asList()) (Самый популярный и используемый подход)
- новый ArrayList<>(Список ())
- Коллекции.addAll()
- Коллекционеры.тоЛист()
- Коллекционеры.Коллекция()
- Списки.newArrayList()
Массивы просты и обеспечивают базовую функциональность группировки совокупности объектов или примитивных типов данных. Однако массивы также ограничены – их размер фиксирован, и даже базовые операции, такие как добавление новых элементов в начале или перестановка элементов, могут усложниться.
К счастью, Платформа Collections познакомила нас со многими очень полезными реализациями Списка s, Набора s и Очереди s.
Одним из них является ArrayList , действительно универсальная и популярная реализация Списка .
Конструктор ArrayList примет любую Коллекцию . Мы можем проявить творческий подход к типу коллекции, которую мы в нее передаем.
Массивы.asList()
Давайте начнем с простейшей формы преобразования. Вспомогательный класс Массивы содержит множество полезных методов. Метод asList() возвращает содержимое массива в Списке :
Это приведет к тому, что реализация List ( ArrayList|/) будет заполнена emp1 , emp2 и emp3 . Выполнение этого кода приводит к:
новый список массивов<>(Arrays.asList())
Лучшим подходом, чем просто присвоение возвращаемого значения вспомогательному методу, является передача возвращаемого значения в новый ArrayList<>() . Это стандартный подход, используемый большинством людей.
Это связано с тем, что метод asList() поддерживается исходным массивом.
Если вы измените исходный массив , список также изменится. Кроме того, asList() возвращает фиксированный размер, поскольку он поддерживается фиксированным массивом. Операции, которые расширят или сократят список, вернут исключение UnsupportedOperationException .
Чтобы избежать этого, мы применим функции ArrayList , передав возвращаемое значение as List() конструктору:
новый ArrayList<>(Список ())
Начиная с Java 9, вы можете пропустить инициализацию самого массива и передачу его в конструктор. Вы можете использовать List.of() и передавать отдельные элементы:
Коллекции.addAll()
Класс Collections предлагает множество полезных вспомогательных методов, и среди них метод addAll () . Он принимает Коллекцию и vararg из элементов и объединяет их.
Он очень универсален и может использоваться со многими ароматами коллекции/vararg. Мы используем ArrayList и массив:
Коллекционеры.тоЛист()
Если вы работаете с потоками, а не с обычными коллекциями, вы можете собрать элементы потока и упаковать их в список с помощью ToList() :
Выполнение этого приведет к:
Коллекционеры.Коллекция()
Аналогично, вы можете использовать метод to Collection() для сбора потоков в разные коллекции. В нашем случае мы введем в него ссылку ArrayList::new метод , хотя вы также можете указать другие ссылки:
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
Это также приводит к:
Списки.newArrayList()
Аналогично Arrays.asList() вспомогательному классу и методу, проект Google Guava познакомил нас с Списками вспомогательным классом. Вспомогательный класс Lists предоставляет метод newArrayList() :
Теперь ключевым преимуществом этого подхода было то, что вам не нужно указывать тип при инициализации ArrayList . Это было действительно полезно, когда у вас был бы <Элемент <Элемент, элемент>> список.
Однако, поскольку Java 7 устранила необходимость явно задавать тип в операторе diamond, это устарело.
Вывод
Существует множество способов преобразования массива в ArrayList в Java. Они простираются от вызова вспомогательных методов до потоковой передачи массива и сбора элементов.
Преобразование между массивом и списком в Java
В этом кратком руководстве мы узнаем, как преобразовывать массив в список, используя основные библиотеки Java, коллекции Guava и Apache Commons.
Эта статья является частью серии «Java — Back to Basic» здесь, на ForEach.
2. Преобразовать список в массив
2.1. Использование простой Java
Начнем с преобразования списка в массив с использованием простой Java :
Обратите внимание, что для нас предпочтительным способом использования метода является toArray(new T[0]) по сравнению с toArray(new T[size]) . Как доказывает Алексей Шипилев в своем блоге , это кажется быстрее, безопаснее и чище.
2.2. Использование гуавы
Теперь давайте воспользуемся API Guava для того же преобразования:
3. Преобразование массива в список
3.1. Использование простой Java
Начнем с простого Java-решения для преобразования массива в список :
Обратите внимание, что это список фиксированного размера, который по-прежнему будет поддерживаться массивом. Если нам нужен стандартный ArrayList, мы можем просто создать его экземпляр:
3.2. Использование гуавы
Теперь давайте воспользуемся API Guava для того же преобразования:
3.3. Использование коллекций Commons
Наконец, давайте воспользуемся API коллекций Apache Commons CollectionUtils.addAll , чтобы заполнить элементы массива в пустом списке:
4. Вывод
Реализацию всех этих примеров и фрагментов кода можно найти на GitHub . Это проект на основе Maven, поэтому его легко импортировать и запускать как есть.