У меня много проблем, превратив массив в ArrayList
в Java. Это мой массив прямо сейчас:
Card[] hand = new Card[2];
"рука" содержит массив "Карточки". Как это выглядело бы как ArrayList
?
У меня много проблем, превратив массив в ArrayList
в Java. Это мой массив прямо сейчас:
Card[] hand = new Card[2];
"рука" содержит массив "Карточки". Как это выглядело бы как ArrayList
?
В качестве 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()
factory методы (элементы не могут быть пустыми):
List<String> il = ImmutableList.of("string", "elements"); // from varargs
List<String> il = ImmutableList.copyOf(aStringArray); // from array
Используйте класс Lists
и его методы newArrayList()
factory:
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 factory позволяет выводить типы большую часть времени. Тем не менее, этот аргумент содержит меньше воды, поскольку Java 7 прибыла с новым оператором бриллианта.
Но это не единственная причина (и Java 7 еще не везде): сокращенный синтаксис также очень удобен, а инициализаторы методов, как видно выше, позволяют писать более выразительный код. Вы делаете в одном вызове Guava то, что берет 2 с текущими коллекциями Java.
Используйте класс JDK Arrays
и его метод asList()
factory:
List<String> l1 = Arrays.asList(anArrayOfElements);
List<String> l2 = Arrays.asList("element1", "element2");
Обратите внимание, что возвращаемый тип для asList()
говорит ArrayList
, но это не java.util.ArrayList
. Это внутренний тип, который копирует ArrayList, но на самом деле напрямую ссылается на прошлый массив и запрещает модификации. См. Следующий шаг, если вам нужен измененный список.
То же, что и выше, но обернуто фактическим 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);
}