【问题标题】:Any way to insert an anonymous array into a collection?有什么方法可以将匿名数组插入到集合中?
【发布时间】:2010-09-09 13:19:56
【问题描述】:

我在这里找到了很多条目说

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

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

//======

分配到集合中怎么样?

我试过这个:

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

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

我可以做些什么来完成这项工作吗?

【问题讨论】:

  • 您的代码使用 Netbeans 为我编译和运行。也许它是特定于编译器的?你用的是什么编译器?也有可能是早期版本的 Java 不支持这个,所以升级到 1.6 再试一次。
  • 在字里行间阅读,他可能正在尝试使用可变参数来插入每个数字。它没有解释错误,但添加数组不会作为该 add 方法的可变参数。
  • 我被困在用 1.5 编译这个项目

标签: java arrays collections anonymous


【解决方案1】:

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

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

?

无论如何,请熟悉 ArraysCollections 类——它们包含许多实用程序,在这种情况下会派上用场。

【讨论】:

  • 是的。我的计划是建立一个集合并对其进行迭代。
  • @Bryan:现在,您的代码不包含 1 个集合,它包含许多集合——它们的列表,实际上,列表的每个元素本身就是一个数组。您可能想要这样做,但这是一个不寻常的数据结构。
  • 我确实想做。怎么不寻常?你会怎么做?
  • 这是完全有效的,但通常我会使用列表列表或二维数组。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    查看guava,尤其是谷歌收藏部分。

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

    结合静态导入,这允许非常简洁的动态集合初始化。

    例如

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

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

    【讨论】:

      【解决方案4】:

      事实上,如果你想制作一个整数表列表,这段代码就可以工作。

      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】:

        这可能是语言语法的限制,或者是规范中的一个错误,即在方法调用语法的解析中,标识符产生在表达式产生之前被发现。不要在方法调用中混合匿名数组声明。

        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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-06-23
          • 1970-01-01
          • 2012-07-29
          • 2018-06-19
          • 2014-06-13
          • 2021-07-03
          • 2021-12-13
          • 1970-01-01
          相关资源
          最近更新 更多