在C#中,我可以创建某种类型的集合,并使用同一行上的数据对其进行初始化。
var foo = new List<string> {"one","two","three"};
在Java中有相同的方法吗?
答案 0 :(得分:32)
如果您需要只读 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]
答案 1 :(得分:6)
List<String> foo = Arrays.asList("one","two","three");
正如Boris在评论中提到的,结果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");
}
};
答案 2 :(得分:4)
我更喜欢使用Guava(以前称为Google Collections)库来实现这一点,它既不需要再次写入类型,又可以通过各种方式直接添加数据。
示例:List<YourClass> yourList = Lists.newArrayList();
或添加数据:List<YourClass> yourList = Lists.newArrayList(yourClass1, yourclass2);
同样适用于所有其他类型的集合及其各种实现。另一个例子:Set<String> treeSet = Sets.newTreeSet();
答案 3 :(得分:1)
我能想到的最好的是:
final List<String> foo = new ArrayList<String>() {{
add("one");
add("two");
add("three");
}};
基本上,这表示您正在创建ArrayList
类的匿名子类,然后使用"one", "two", "three"
静态初始化。
答案 4 :(得分:0)
List<String> list = Arrays.asList("one","two","three")
答案 5 :(得分: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");