29

在 C# 中,我可以创建某种集合并使用同一行上的数据对其进行初始化。

var foo = new List<string> {"one","two","three"};

在Java中是否有等效的方法来做到这一点?

4

6 回答 6

44

如果您需要只读 List

List<String> numbers = Arrays.asList("one","two","three");

// Can't add since the list is immutable
numbers.add("four"); // java.lang.UnsupportedOperationException

如果以后想修改List

List<String> numbers2 = new ArrayList<String>(
                            Arrays.asList("one","two","three"));
numbers2.add("four");

System.out.println(numbers2); // [one, two, three, four]
于 2013-10-04T15:33:38.217 回答
10

您可以使用Arrays.asList(T... a)

List<String> foo = Arrays.asList("one","two","three");

正如鲍里斯在评论中提到的那样,结果List是不可变的(即只读)。您需要将其转换为ArrayList或类似才能修改集合:

List<String> foo = new ArrayList<String>(Arrays.asList("one","two","three"));

您还可以List使用匿名子类和初始化程序创建:

List<String> foo = new ArrayList<String>() {
    {
        add("one");
        add("two");
        add("three");
    }
};
于 2013-10-04T15:29:53.893 回答
4

我更喜欢使用 Guava(以前称为 Google Collections)库来执行此操作,它既消除了再次写下类型的需要,又具有各种直接添加数据的方法。

例子:List<YourClass> yourList = Lists.newArrayList();

或添加数据:List<YourClass> yourList = Lists.newArrayList(yourClass1, yourclass2);

这同样适用于所有其他类型的集合及其各种实现。另一个例子:Set<String> treeSet = Sets.newTreeSet();

您可以在https://code.google.com/p/guava-libraries/找到它

于 2013-10-04T15:33:51.253 回答
1

我能想到的最好的是:

final List<String> foo = new ArrayList<String>() {{
  add("one");
  add("two");
  add("three");
}};

基本上,这表示您正在创建该类的匿名子类ArrayList,然后使用"one", "two", "three".

于 2013-10-04T15:31:10.410 回答
0
List<String> list = Arrays.asList("one","two","three")
于 2013-10-04T15:29:14.250 回答
0
List<String> numbers = Arrays.asList("one","two","three");

正如鲍里斯评论的那样,它使你的numbers不可变。

是的,你可以,但有两条线。

List<String> numbers= new ArrayList<String>();
Collections.addAll(numbers,"one","two","three");

如果你还想在只有一行,和Gauva

List<String> numbers= Lists.newArrayList("one","two","three");
于 2013-10-04T15:30:01.437 回答