Дополнительно
Создание списка ArrayList из массива
У меня есть массив, который инициализируется следующим образом:
Element[] array = {new Element(1), new Element(2), new Element(3)};
Я хотел бы преобразовать этот массив в объект класса ArrayList.
ArrayList<Element> arraylist = ???;
3423
20
Дано:
Самый простой ответ это делать:
Это будет работать нормально. Но некоторыми оговорками:
коллекции
. В противном случае вы'll получить для себя возникновению unsupportedoperationexception`.asList()
опирается на исходный массив. Если вы измените исходный массив, список будет изменен, а также. Это может быть удивительно.<суп>(старый нить, но только 2 цента как никто не упоминал гуавы или других библиотек и некоторые другие детали) в</SUP-серфинг>
Если Вы Можете, Использовать Гуава
Это's стоит отметить гуава способом, что значительно упрощает эти махинации:
Использование ##
Для неизменяемого списка
Используйте
ImmutableList
класс ии()
икопия()
методами фабрики <суп>(элементы могут'т быть null)</суп>:Для Изменяемых Список
Используйте
списки
]4 класс иnewArrayList()
методы фабрики:Также обратите внимание на аналогичные методы для других структур данных в другие классы, например, в
наборы
.Почему Гуавы?
Главной достопримечательностью может быть, чтобы уменьшить беспорядок из-за дженерики для безопасности типа, так как использование гуавы фабричные позволяют видах должно быть выведено большую часть времени. Однако, этот аргумент имеет меньше воды, начиная с Java 7 прибыл с новым оператором Алмаз.
Но это's не единственная причина (и Java 7 это'т везде пока): сокращенный синтаксис тоже очень удобно, и методы, инициализаторы, как показано выше, позволяют писать более выразительный код. Вы в одном гуава назвать то, что за 2 с текущими коллекциями Java.
Если вы можете'т...
Для неизменяемого списка
Используйте версию JDK'ы
массивы
класс иasList()
метод фабрики, завернутый с коллекции.unmodifiableList()
:Обратите внимание, что возвращаемый тип для asList()
является
списокс помощью осуществления конкретной
коллекции, но **не**
Ява.утиль.Класса ArrayList. Это'с внутренним типом, который эмулирует
коллекции`, но на самом деле напрямую ссылается на массив и делает ее "писать" По (изменения отражены в массиве).Он запрещает изменения через некоторые из
списка
АПИ'ы методов путем простого расширенияAbstractList
(таким образом, добавляя или удаляя элементы не поддерживаются), но позволяет делать звонкинабор () переопределять элементы. Таким образом, этот список вовсе'т-настоящему непреложное и в asList () должны быть обмотаны коллекций.unmodifiableList()
.Увидеть следующий шаг, если вам нужен изменяемый список.
Для изменяемых список
Как и выше, но завернутый с
Ява.утиль.Класса ArrayList
:Для образовательных целей: хороший ol' ручным способом
Поскольку этот вопрос довольно старый, меня удивляет, что никто не предложил самый простой формы:
Начиная с Java 5, `массивы.asList () принимает параметр varargs и вы Don'т иметь, чтобы явно построить массив.
Убедитесь, что
myArray
имеет тот же тип, что иT
. Вы'получите ошибку компилятора, если попытаетесь создатьList
из массиваint
, например.Другой способ (хотя по сути эквивалентно новый ArrayList(массивов.asList(массив)) производительность-мудрое решение:
Ява 9
В Ява 9 Вы можете использовать
список.в
статический метод фабрики, чтобы создать список литералов. Что-то вроде следующего:Это позволит вернуть неизменяемые список, содержащий три элемента. Если вы хотите Мутабельный список, передать этот список в
коллекции
конструктора:Сеп 269: удобство метода фабрики для коллекций
Сеп 269 приводятся некоторые удобные методы фабрики для коллекций Java интерфейс API. Эти неизменные статические методы фабрики построены в "список",
С
и "карта" интерфейсы в Java 9 и позже.Возможно, вам нужен просто список, а не ArrayList. В этом случае вы можете просто сделать:
Еще одно обновление, почти конец 2014 года, вы можете сделать это с Java 8 тоже:
Несколько персонажей будут сохранены, если это может быть просто "список"
Если вы используете :
вы мая создать и заполнить два списка ! Заполняя два раза большой список-это именно то, что вы Don'т хотите, чтобы сделать, потому что будет создан еще один объект[]` массив каждый раз, когда возможностей должен быть продлен.
К счастью, реализация JDK-это массивы и быстро
.asList(а[])
очень хорошо сделано. Это создать некую коллекцию именованных массивов.Класса ArrayList, где объект[] точек данных непосредственно в массив.Опасная сторона заключается в том, что если вы измените исходный массив, вы измените список ! Вы уверены, что хотите этого ? Может да, а может нет.
Если нет, наиболее понятный способ сделать это :
Или как сказал @glglgl, вы можете создать другой независимый коллекции с :
Я люблю использовать "коллекции",
массивы
, или гуава. Но если это не'т подходят, или вы не'т чувствую это, просто написать еще один безвкусный линии вместо.В языке Java 9` вы можете использовать:
В соответствии с Вопрос ответ с использованием Java 1.7 является:
Однако он's лучше всегда использовать интерфейс:
Вы можете конвертировать с помощью различных методов
Список<элемент> Список = массивов.asList(массив);
Список<элемент> Список = новый ArrayList(); Коллекции.методы addall(список, массив);
Список класса ArrayList = новый ArrayList(); список.методы addall(массивов.asList(массив));`
Для более подробной информации вы можете обратиться к http://javarevisited.blogspot.in/2011/06/converting-array-to-arraylist-in-java.html
как все сказали, что это не так
и общий новейший способ, чтобы создать массив observableArrays
ObservableList: список, который позволяет слушателям отслеживать изменения, когда они происходят.
для Java SE можно попробовать
то есть по данным Оракул документы
Обновление Java 9
также в Java 9 Это's немного проще:
Начиная с Java 8 есть более простой способ для преобразования:
Вы также можете сделать это с Stream в Java 8.
открытые статические и л;т> Список<Т> asList(т а) //с varargs имеют тип T.
Таким образом, вы можете инициализировать
коллекции
, как это:Список<элемент> класса ArrayList = массивов.asList(новый элемент(1) новый элемент(2) новый элемент(3));
публичный статический <П> логические методы addall(коллекция<? супер Т> с, т... а); Итак, этот код тоже полезно это делать
Коллекции.методы addall(ArrayList, в массиве);
Еще один простой способ-добавить все элементы из массива в новый ArrayList, используя для каждой петли.
Если массив примитивного типа, ответы выиграл'т работу. Но начиная с Java 8 вы можете использовать: