Преобразование массива в ArrayList [дубликат]


этот вопрос уже есть ответ здесь:

у меня много проблем с превращением массива в ArrayList в Java. Это мой массив прямо сейчас:

Card[] hand = new Card[2];

"рука" держит массив "карты". Как это будет выглядеть как ArrayList?

5 66

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);
}
List<Card> list = new ArrayList<Card>(Arrays.asList(hand));

объявление списка (и инициализация его с пустым arraylist)

List<Card> cardList = new ArrayList<Card>();

добавление элемента:

Card card;
cardList.add(card);

перебора элементов:

for(Card card : cardList){
    System.out.println(card);
}