我知道你可以在实例化过程中初始化一个数组,如下:

String[] names = new String[] {"Ryan", "Julie", "Bob"};

有没有办法对数组列表做同样的事情?或者我必须用array.add()单独添加内容?


当前回答

Yes.

new ArrayList<String>(){{
   add("A");
   add("B");
}}

这实际上是在创建一个派生自ArrayList<String>的类(外部花括号的功能),然后声明一个静态初始化器(内部花括号的功能)。这实际上是包含类的内部类,所以它有一个隐式This指针。这不是问题,除非你想序列化它,或者你希望外部类被垃圾收集。

我知道Java 7将提供额外的语言结构来完成您想要的工作。

编辑:最近的Java版本为创建这样的集合提供了更多可用的函数,并且值得研究以上(在这些版本之前提供)

其他回答

在Java中,列表没有文字语法,所以你必须使用.add()。

如果你有很多元素,这有点啰嗦,但你可以:

使用Groovy或类似的东西 使用arrays . aslist(数组)

2看起来像这样:

String[] elements = new String[] {"Ryan", "Julie", "Bob"};
List list = new ArrayList(Arrays.asList(elements));

但是这会导致一些不必要的对象创建。

数组。asList可以在这里提供帮助:

new ArrayList<Integer>(Arrays.asList(1,2,3,5,8,13,21));

Yes.

new ArrayList<String>(){{
   add("A");
   add("B");
}}

这实际上是在创建一个派生自ArrayList<String>的类(外部花括号的功能),然后声明一个静态初始化器(内部花括号的功能)。这实际上是包含类的内部类,所以它有一个隐式This指针。这不是问题,除非你想序列化它,或者你希望外部类被垃圾收集。

我知道Java 7将提供额外的语言结构来完成您想要的工作。

编辑:最近的Java版本为创建这样的集合提供了更多可用的函数,并且值得研究以上(在这些版本之前提供)

Arrays.asList("Ryan", "Julie", "Bob");

这是你能得到的最接近的答案:

ArrayList<String> list = new ArrayList(Arrays.asList("Ryan", "Julie", "Bob"));

你可以用更简单的方法:

List<String> list = Arrays.asList("Ryan", "Julie", "Bob")

查看数组的源代码。asList,它构造一个数组列表,但默认情况下转换为List。所以你可以这样做(但对新的jdk不可靠):

ArrayList<String> list = (ArrayList<String>)Arrays.asList("Ryan", "Julie", "Bob")