代码之家  ›  专栏  ›  技术社区  ›  Bryan James

有没有办法在集合中插入匿名数组?

  •  3
  • Bryan James  · 技术社区  · 14 年前

    我在这里找到了很多条目

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

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

    //======

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

    有什么我能做的吗?

    5 回复  |  直到 14 年前
        1
  •  1
  •   Alex Feinman    14 年前

    你已经列了一个数组的列表。这真的是你想要的吗,还是你想问一些类似的问题

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

    ?

    Arrays Collections 类——它们包含了很多实用程序,在这种情况下非常有用。

        2
  •  1
  •   locka    14 年前

    从数组生成列表的最简单方法:

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

    注意列表是固定大小的,由输入数组支持,因此对列表的更改实际上会写入数组。添加或删除元素可能会导致UnsupportedOperationException。如果你想搞乱数组,比如添加或删除元素,你可能需要将这些元素复制到另一个列表中

        3
  •  0
  •   Peter Tillemans    14 年前

    退房 guava 尤其是谷歌收藏部分。

    几个集合类定义了一个静态方法 共(…) 它将添加给该集合的所有对象。

    结合静态导入,这使得非常简洁的学院初始化在飞行中。

    例如

    import static com.google.common.collect.ImmutableList.of;
    ...
    
    someFunc(of("abc","def","ghi"));
    

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

        4
  •  0
  •   oyo    14 年前

    事实上,如果您想创建一个整数表列表,那么这段代码就可以工作。

    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

        5
  •  0
  •   Community CDub    8 年前

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

    我得到“需要标识符”和

    在“标识符”中应为数据.add(…)可能是由于编译器需要标识符而找到解析为匿名实例的表达式所致。在很多地方这种语法是可以接受的,我不知道为什么数据.add()需要标识符。

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

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

    this answer on a similar problem 有人做过学习数组列表。JavaGlossary有一组很好的 Compile-time errors .