将数组转换为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); } 
Interesting Posts