如果可以的话,用番石榴
值得指出的是,番石榴方式极大地简化了这些恶作剧:
使用
对于不可变的列表List il = ImmutableList.of("string", "elements"); // from varargsList il = ImmutableList.copyOf(aStringArray);
// from array
对于可变列表List l1 = Lists.newArrayList(anotherListOrCollection); // from collectionList l2 = Lists.newArrayList(aStringArray);
// from arrayList l3 = Lists.newArrayList("or", "string", "elements"); // from varargs
还请注意其他类中其他数据结构的类似方法,例如Sets.
最吸引人的地方可能是减少由于仿制品的使用而造成的杂乱,例如使用番石榴。工厂方法允许大多数情况下推断类型。然而,自从Java 7与新的菱形操作符到达之后,这个论点就不那么站得住脚了。
但这并不是唯一的原因(而且Java 7还不是无处不在):速记语法也非常方便,方法初始化器(如上文所示)允许编写更有表现力的代码。您可以在一个番石榴调用中调用当前Java集合所需的2。
如果你不能.。
对于不可变的列表List l1 = Collections.unmodifiableList(Arrays.asList(anArrayOfElements));
List l2 = Collections.unmodifiableList(Arrays.asList("element1", "element2"));
请注意,返回的类型为asList()是List用混凝土ArrayList执行,但不是 java.util.ArrayList..它是一个内部类型,它模仿ArrayList但实际上直接引用传递的数组并使其“写入”(修改反映在数组中)。
它禁止通过某些ListAPI的方法是简单地扩展AbstractList(因此,不支持添加或移除元素),但是它允许调用set()覆盖元素。因此,这个列表并不是真正不可变的,而是调用asList()应该用Collections.unmodifiableList().
如果需要可变列表,请参见下一步。
对于可变列表
和上面一样,但是用一个实际的java.util.ArrayList:List l1 = new ArrayList(Arrays.asList(array));
// Java 1.5 to 1.6List l1b = new ArrayList<>(Arrays.asList(array));
// Java 1.7+List l2 = new ArrayList(Arrays.asList("a", "b"));
// Java 1.5 to 1.6List l2b = new ArrayList<>(Arrays.asList("a", "b")); // Java 1.7+
教育目的:良好的手册方式// for Java 1.5+static List arrayToList(final T[] array) {
final List l = new ArrayList(array.length);
for (final T s : array) {
l.add(s);
}
return (l);}// for Java
final List l = new ArrayList(array.length);
for (int i = 0; i
l.add(array[i]);
}
return (l);}