在 Java 中直接设置数组列表的值

2022-09-03 09:22:05

为 Java ArrayList 设置值列表的工作原理:

Integer[] a = {1,2,3,4,5,6,7,8,9};
ArrayList<Integer> possibleValues2 = new ArrayList<Integer>(Arrays.asList(a));

但是,以下内容不起作用,并且具有错误“类型非法开始”以及其他错误。为什么不呢?既然第一个代码块中的第一行只是赋值,那它不应该有效果吗?

ArrayList<Integer> possibleValues2 = new ArrayList<Integer>(Arrays.asList({1,2,3,4,5,6,7,8,9}));

答案 1

您应该使用 vararg 版本的 ,例如Arrays.asList

ArrayList<Integer> possibleValues2 =
    new ArrayList<Integer>(Arrays.asList(1,2,3,4,5,6,7,8,9));

或显式创建数组参数,例如

ArrayList<Integer> possibleValues2 =
    new ArrayList<Integer>(Arrays.asList(new Integer[]{1,2,3,4,5,6,7,8,9}));

答案 2

一个奇怪而很少使用的成语,

List<Integer> ints = new ArrayList<Integer>() {{add(1); add(2); add(3);}}

这将创建一个匿名类,该类扩展 ArrayList(外括号),然后实现实例初始值设定项(内括号)并在那里调用 List.add()。

这样做的好处是它适用于任何集合类型:Arrays.asList()

Map<String,String> m = new HashMap<>() {{ 
  put("foo", "bar");
  put("baz", "buz"); 
  ...
}}

推荐