将数组转换为ArrayList
在Java中将数组转换为ArrayList
遇到了很多麻烦。 这是我现在的arrays:
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()
工厂方法(元素不能为空) :
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
。
为什么番石榴?
主要的吸引力可能是减less由于types安全性generics造成的混乱,因为使用Guava 工厂方法可以在大多数情况下推断types。 然而,从Java 7到达新的钻石运营商以来,这个论点的用水量就减less了。
但并不是唯一的原因(Java 7并没有到处都是):简写语法也非常方便,如上所述,方法初始化器允许编写更多expression式代码。 你可以在一个Guava中调用当前Java Collections的2个参数。
如果你不能…
对于不可变列表
使用JDK的Arrays
类和它的asList()
工厂方法:
List<String> l1 = Arrays.asList(anArrayOfElements); List<String> l2 = Arrays.asList("element1", "element2");
请注意, asList()
的返回types表示ArrayList
,但它不是java.util.ArrayList
。 这是一个内部types,它复制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));
声明列表(并用空的数组列表初始化)
List<Card> cardList = new ArrayList<Card>();
添加一个元素:
Card card; cardList.add(card);
迭代元素:
for(Card card : cardList){ System.out.println(card); }