【问题标题】:Adding elements to cascade ArrayList in Java在Java中将元素添加到级联ArrayList
【发布时间】:2020-07-05 13:08:50
【问题描述】:

我有以下列表来保留 3x3 矩阵值:

1 2 3 
4 5 6
7 8 9

List<List<Integer>> list = new ArrayList<>(); 

我想添加矩阵值,如下所示:

list.add(0, new ArrayList<Integer>{1, 2, 3});
list.add(1, new ArrayList<Integer>{4, 5, 6});
list.add(2, new ArrayList<Integer>{7, 8, 9});

但遇到语法错误。那么,这是正确的方法,还是使用级联列表分配矩阵值的正确方法是什么?

【问题讨论】:

  • 删除“0,”,“1,”,“2,”就可以了。或者您想使用 Dictionary> 代替?或者它不是 Java 中的字典,还是别的什么?
  • 多维数组会更合适吗?
  • @BitLauncher 我在问这个问题之前尝试过,但没有奏效。你的意思是list.add(new ArrayList&lt;Integer&gt;{1,2,3});?我是这样用的。有什么想法吗?
  • @Sid 你说得对,但这是一个问题,我必须使用 List :( 有什么想法吗?
  • @Eklavya 你为什么删除你的帖子?

标签: java list arraylist


【解决方案1】:

您有以下选择:

  1. Java-9 以上:

    List<List<Integer>> list = new ArrayList<>();
    list.add(List.of(1, 2, 3));
    list.add(List.of(4, 5, 6));
    list.add(List.of(7, 8, 9));
    
  2. Java-9 之前:

    List<List<Integer>> list = new ArrayList<>();
    list.add(Arrays.asList(1, 2, 3));
    list.add(Arrays.asList(4, 5, 6));
    list.add(Arrays.asList(7, 8, 9));
    
  3. List 中的Integer[]

        List<Integer[]> list = new ArrayList<>();
        list.add(new Integer[] { 1, 2, 3 });
        list.add(new Integer[] { 4, 5, 6 });
        list.add(new Integer[] { 7, 8, 9 });
    
  4. 使用 Stream API:

         List<List<Integer>> list = Stream.of(
                                             List.of(1, 2, 3), 
                                             List.of(4, 5, 6), 
                                             List.of(7, 8, 9))
                                         .collect(Collectors.toList());
    

【讨论】:

  • 不错的答案。在最后一个,你可能想做一个map(ArrayList::new),因为List.of 是不可变的。 OP 可能想要操纵这些值。
【解决方案2】:

没有用于创建 ArrayList 并向其添加项目的短格式语法,例如 new ArrayList&lt;Integer&gt;{1, 2, 3}

如果你不需要ArrayList,我推荐使用List.of方法创建的不可变列表:

list.add(0, List.of(1, 2, 3));
list.add(1, List.of(4, 5, 6));
list.add(2, List.of(7, 8, 9));

如果出于某种原因必须使用 ArrayList,请这样做:

List<Integer> arrayList0 = new ArrayList<>();
arrayList0.add(1);
arrayList0.add(2);
arrayList0.add(3);

list.add(0, arrayList0);

// repeat for index 1, 2

【讨论】:

  • 最好提一下 List.of 可从 Java 9 获得
【解决方案3】:

您不能在ArrayList 构造函数中直接指定要添加的元素。相反,您可以这样做。

List<List<Integer>> list = new ArrayList<>();
list.add(0, List.of(1, 2, 3));
list.add(1, List.of(4, 5, 6));
list.add(2, List.of(7, 8, 9));

或者

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

请注意,List.of 返回一个不可变列表。而Arrays.asList 返回的列表可以是set,但不能是add

【讨论】:

    【解决方案4】:

    选项 1:

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

    选项 2:

        List<List<Integer>> list = new ArrayList<>();
        List<Integer> subList;
        int n = 1;
    
        for(int i = 0; i < 3; ++i){
            subList = new ArrayList<>();
            for (int j = 0; j < 3; ++j){
                subList.add(n);
                n++;
            }
            list.add(subList);
        }
    

    【讨论】:

    • 欢迎 :) 很高兴它有帮助
    【解决方案5】:

    你不能像那样初始化一个java ArrayList。 您可以通过以下方式进行:

    1. 使用Arrays.asList

      new ArrayList(Arrays.asList(1, 2, 3));

    2. 如果你使用番石榴

      Lists.newArrayList(1, 2, 3)

    3. 如果你使用 Java8

      Stream.of(1, 2, 3).collect(Collectors.toCollection(ArrayList::new))

    【讨论】:

      【解决方案6】:

      这是另一种解决方案,虽然有点复杂,但很有效:

          List<List<Integer>> list = new ArrayList<>();
          ArrayList<Integer>row1 = new ArrayList();
          ArrayList<Integer>row2 = new ArrayList();
          ArrayList<Integer>row3 = new ArrayList();
          row1.addAll(List.of(1, 2, 3));
          row2.addAll(List.of(4, 5, 6));
          row3.addAll(List.of(7, 8, 9));
          
          list.add(0,row1);
          list.add(1,row2);
          list.add(2,row3);
      
          System.out.println(list);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-11
        • 2017-06-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多