List <t>初始化是否比调用Arrays.asList更好?</t>

时间:2011-07-30 05:08:13

标签: java

使用Arrays.asList作为List批量初始化程序是否有更好的替代方法?值得关注的是,这个问题很冗长,涉及一个无关的类和方法。

List<Double> myList = new ArrayList<Double>(Arrays.asList(3.01d, 4.02d, 5.03d));

编辑:这个问题与批量初始化有关,通常会有超过示例中显示的三个值。

6 个答案:

答案 0 :(得分:5)

如果您知道以后不需要在列表中添加任何内容,则可以执行

List<Double> myList = Arrays.asList(3.01d, 4.02d, 5.03d);

我很确定可以修改从Arrays.asList返回的列表,但只是因为您可以更改那里的元素 - 您无法向其中添加新元素。

答案 1 :(得分:3)

使用guava

List<Double> myList = Lists.newArrayList(3.01d, 4.02d, 5.03d));

答案 2 :(得分:1)

另一种选择是作为匿名内部类:

List<Double> myList = new ArrayList() {
{
   add(3.01d);
   add(4.02d);
   add(5.03d);
}
};

答案 3 :(得分:1)

是的,你可以这样做:

List<Double> myList = Arrays.asList(new Double[]{3.01d, 4.02d, 5.03d});
// or
List<Double> myList = Arrays.asList(3.01d, 4.02d, 5.03d);

答案 4 :(得分:1)

从java 9开始,您可以使用List.of工厂方法:

static <E> List<E> of​(E... elements)
  

返回包含任意数量元素的不可变列表。

或者使用番石榴:

public static <E> ImmutableList<E> of(E e1, E e2,...)
  

按顺序返回包含给定元素的不可变列表。

答案 5 :(得分:0)

与100%的问题不匹配,但添加此答案以防止想要实例化List只是为了能够立即对其中的值执行某些操作,而不仅仅为了实例化而实例化List单独进行实例化。

使用Java 8,您可以使用Stream.of(T... values),然后通过流API处理蒸汽,以便从值列表中获得所需的结果。

例如,要获取一系列值的最大值...

int maxValue = Stream.of(10, 5, 25).max(Integer::compareTo).get();

上述示例对于您需要Math.max(#,#)类型功能但有两个以上要处理的参数时也很有用。