我知道你可以在实例化过程中初始化一个数组,如下:
String[] names = new String[] {"Ryan", "Julie", "Bob"};
有没有办法对数组列表做同样的事情?或者我必须用array.add()单独添加内容?
我知道你可以在实例化过程中初始化一个数组,如下:
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")