有什么方法可以将匿名数组插入集合中吗?

时间:2010-09-09 13:19:57

标签: java arrays collections anonymous

我发现这里有很多条目说

someFunc(new int[]{1,2,3});

适用于调用方法并在for / each循环中使用。

// ==

如何分配到集合中?

我试过这个:

ArrayList<int[]> data = new ArrayList<int[]>();
data.add(new int[]{21, 19629});

我得到“标识符预期”和“非法开始类型”。

我能做些什么让这项工作?

5 个答案:

答案 0 :(得分:1)

你已经制作了一个数组列表。这真的是你想要的,还是你想问的问题

ArrayList<Integer> data = new ArrayList<Integer>();
data.add(new int[]{1,2,3});

在任何情况下,熟悉ArraysCollections类 - 它们包含许多在这种情况下派上用场的实用程序。

答案 1 :(得分:1)

从数组中创建列表的最简单方法:

List<String> myList = Arrays.asList("Hello", "There", "Foo", "Bar);

请注意,列表是固定大小,并由输入数组支持,因此对列表的更改实际上会写入数组。添加或删除元素可能会导致UnsupportedOperationException。如果您打算使用数组,例如添加或删除元素,则可能需要将元素复制到另一个列表中

答案 2 :(得分:0)

查看guava,尤其是google collection部分。

一些集合类定义了一个静态方法 of(...),它将添加给该集合的所有对象。

结合静态导入,可以实现非常简洁的集合初始化。

e.g。

import static com.google.common.collect.ImmutableList.of;
...

someFunc(of("abc","def","ghi"));

将使用字符串列表调用someFunc。

答案 3 :(得分:0)

实际上,如果要创建整数表的列表,则此代码有效。

public static void main(String[] args) {
    List<int[]> data = new ArrayList<int[]>();
    data.add(new int[]{21, 19629})
    for(int[] tab : data){//I loop each tab (only one here)
        for(int i: tab){//I loop each values
            System.out.println(i);
        }
    }

}

打印 21 19629

答案 4 :(得分:0)

这可能是语言语法的限制,或者是在解析方法调用语法时在表达式生成之前找到标识符生成的规范中的错误。不要在方法调用中混合使用匿名数组声明。

  

data.add(new int [] {21,19629});

     

我得到“预期的标识符”和   “非法开始类型”。

data.add(...)中的“标识符”可能是由编译器期望标识符并找到解析为匿名实例的表达式引起的。有几个地方可以接受这种语法,我不确定为什么data.add()需要一个标识符。

“非法启动类型”可能是编译器认为表达式是匿名类型声明,但语法在方法调用中不允许这样做。

尝试使用变量创建它,然后将变量作为方法arg传递。

int[] nums = new int[] {0,1,2};   
data.add(nums);

在寻找ArrayList.add()语法的更多细节时,我发现this answer on a similar problem有人学习了ArrayList。 JavaGlossary有一套很好的Compile-time errors