Преобразование массива в ArrayList [дубликат]
этот вопрос уже есть ответ здесь:
- создать ArrayList из массива 32 ответы
у меня много проблем с превращением массива в ArrayList
в Java. Это мой массив прямо сейчас:
Card[] hand = new Card[2];
"рука" держит массив "карты". Как это будет выглядеть как ArrayList
?
5 ответов:
как
ArrayList
эта строка будетimport java.util.ArrayList; ... ArrayList<Card> hand = new ArrayList<Card>();
использовать
ArrayList
у васhand.get(i); //gets the element at position i hand.add(obj); //adds the obj to the end of the list hand.remove(i); //removes the element at position i hand.add(i, obj); //adds the obj at the specified index hand.set(i, obj); //overwrites the object at i with the new obj
также прочитайте это http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html
это даст вам список.
List<Card> cardsList = Arrays.asList(hand);
Если вы хотите arraylist, вы можете сделать
ArrayList<Card> cardsList = new ArrayList<Card>(Arrays.asList(hand));
Если Вы Можете, Используйте Гуава
стоит отметить путь гуавы, который значительно упрощает эти махинации:
использование
для неизменяемого списка
использовать
ImmutableList
класса и егоof()
иcopyOf()
методы фабрики (элементы не могут быть null):List<String> il = ImmutableList.of("string", "elements"); // from varargs List<String> il = ImmutableList.copyOf(aStringArray); // from array
Для Изменяемого Списка
использовать
Lists
класс и егоnewArrayList()
заводских способами:List<String> l1 = Lists.newArrayList(anotherListOrCollection); // from collection List<String> l2 = Lists.newArrayList(aStringArray); // from array List<String> l3 = Lists.newArrayList("or", "string", elements"); // from varargs
Обратите также внимание на аналогичные методы для других структур данных в других классах, например в
Sets
.Почему Гуавы?
главным образом привлекательность смогла быть уменьшить беспорядок должный к дженерикам для тип-безопасности, как польза Guava методы фабрики разрешить типы, которые будут выведены большую часть времени. Однако этот аргумент содержит меньше вода с Java 7 прибыла с новым алмазным оператором.
но это не единственная причина (и Java 7 еще не везде): сокращенный синтаксис также очень удобен, а инициализаторы методов, как видно выше, позволяют писать более выразительный код. Вы делаете в одном вызове Guava то, что принимает 2 с текущими коллекциями Java.
если вы не можете...
для неизменяемого списка
используйте JDK
Arrays.asList()
иCollections.unmodifiableList()
заводских способами:List<String> l1 = Arrays.asList(anArrayOfElements); List<String> l2 = Arrays.asList("element1", "element2");
внимание:
- возвращаемый тип для
asList()
говоритArrayList
, но неjava.util.ArrayList
. Это внутренний тип, который имитируетArrayList
но на самом деле напрямую ссылается на прошлое время и запрещает некоторые модификации.unmodifiableList()
далее блокирует изменения в возвращенном представлении исходного списка.см. Следующий шаг, если вам нужен изменяемый список.
для изменяемого списка
то же, что и выше, но завернутый с фактическим
java.util.ArrayList
:List<String> l1 = new ArrayList<String>(Arrays.asList(array)); // Java 1.5 to 1.6 List<String> l1b = new ArrayList<>(Arrays.asList(array)); // Java 1.7+ List<String> l2 = new ArrayList<String>(Arrays.asList("a", "b")); // Java 1.5 to 1.6 List<String> l2b = new ArrayList<>(Arrays.asList("a", "b")); // Java 1.7+
для образовательных целей: хороший ручной способ
// for Java 1.5+ static <T> List<T> arrayToList(final T[] array) { final List<T> l = new ArrayList<T>(array.length); for (final T s : array) { l.add(s); } return (l); } // for Java < 1.5 (no generics, no compile-time type-safety, boo!) static List arrayToList(final Object[] array) { final List l = new ArrayList(array.length); for (int i = 0; i < array.length; i++) { l.add(array[i]); } return (l); }