2011-10-14 75 views
11

我有一个非常简单的问题:Java快速数组列表

我怎样才能使这个代码更简单的Java的:

ArrayList<String> s = new ArrayList<String>(); 
s.add("str1"); 
s.add("str hello"); 
s.add("str bye"); 
//... 

类似的东西:

ArrayList<String> s = {"a1", "str", "mystr"}; 

,或者:

ArrayList<String> s = new ArrayList<String>("a1", "str", "mystr"); 

or that:

ArrayList<String> s = new ArrayList<String>(); 
s.addAll("a1", "str", "mystr"); 

,或者:

ArrayList<String> s = new ArrayList<String>(); 
s.addAll(new ArrayElements("a1", "str", "mystr")); 

我只想语法提示。谢谢。

+0

http://stackoverflow.com/questions/2760995/java-arraylist-initialization – Vlad

回答

19

如何:

ArrayList<String> s = new ArrayList<String>(); 
Collections.addAll(s, "a1", "str", "mystr"); 
5
List<String> s = Arrays.asList(new String[] {"a1", "str", "mystr"}); 
+0

我不相信这就是最快速的方法,你创建了很多对象在这里.. – Rob

+0

@Rob:OP要求简单,而不是快速 – amit

+9

'列表 s = Arrays.asList(“a1”,“str”,“mystr”);'更好 –

4

我会用Guava和其妙Lists类:

List<String> list = Lists.newArrayList("a1", "str", "mystr"); 
22

List<String> s = Arrays.asList("a1", "str", "mystr");

+4

这会返回一个固定大小的列表而不是java .util.ArrayList。所以当不再需要添加或移除元素时是很好的。 – x22

+3

这是真的。从OP中不清楚这是否是一个问题。 – dty

4

您可以使用双括号:

ArrayList<String> s = new ArrayList<String>() 
{{ 
    add("str1"); 
    add("str hello"); 
    add("str bye"); 
    //... 
}}; 
+2

与其仅仅产生深奥的语法,不是一个好主意,向OP解释它是什么以及它是如何工作的? – dty

+1

dty,这是双大括号初始化,详细解释请参见http://c2.com/cgi/wiki?DoubleBraceInitialization。 – SerCe

0

如果您使用的是Java 9,你可以使用List.of()

List<String> s = List.of("str1", "str hello", "str bye"); 

但是这将是一个不可变列表。如果你需要一个可变的ArrayList:

ArrayList<String> s = new ArrayList<>(List.of("str1", "str hello", "str bye"))