【问题标题】:How to index arrays inside an array list?如何在数组列表中索引数组?
【发布时间】:2012-11-19 00:48:12
【问题描述】:

我有一个二维数组:

int[][] Key = {{1,0,1,0,1,0},{1,0,1,0,1,0},{1,0,1,0,1,0},{1,0,1,0,1,0},
                        {1,0,1,0,1,0},{1,0,1,0,1,0},{1,0,1,0,1,0},{1,0,1,0,1,0}};

将这个 2D 数组拆分为 8*1D 数组(每个块 1 个)需要什么。所以我定义了 8 个新的一维数组以及一个数组列表来放置所有这些数组:

   ArrayList<int[]> B_Blocks = new ArrayList<int[]>(); 

   int[] B0 = new int[Key[0].length];
   int[] B1 = new int[Key[0].length];
   int[] B2 = new int[Key[0].length];
   int[] B3 = new int[Key[0].length];
   int[] B4 = new int[Key[0].length];
   int[] B5 = new int[Key[0].length];
   int[] B6 = new int[Key[0].length];
   int[] B7 = new int[Key[0].length];

我需要一种方法来索引数组列表中的数组,例如我想将Key 的第一行值添加到Arraylist 中的第一个数组中

P.S 数组列表的全部意义在于稍后通过 forloops 获得更多操作的访问权限。任何帮助谢谢

我尝试使用以下嵌套的 for 循环来添加值:

for (int i =0;i<Key.length;i++) {
       for (int j =0;j<Key[0].length;j++) {
       B_Blocks.get(i)[j] = Key[i][j] ;
        } 
   }

它运行但输出时的值不一样:

for (int i =0;i<rightblock.length;i++) {
       for (int j =0;j<rightblockExp[0].length;j++) {
       System.out.print(B_Blocks.get(i)[j]);
        } System.out.print("\n");
   }

【问题讨论】:

  • arrayList 充其量与二维数组一样快。事实上,我认为它是在内部使用数组实现的。
  • List 实现类保存索引,可以使用 list.set(index, elem) 方法将元素放在指定索引处。
  • 可以给我一个语法示例吗?

标签: java arrays arraylist indexing


【解决方案1】:

如果要在指定索引处添加元素,可以使用列表中重载的add(index, elem) 方法。

list.add(0, key[0][0]);
list.add(1, key[0][1]);

【讨论】:

  • 我将如何使用该技术。将 Key 中的第一行添加到 arrayList 中的第一个数组中?
  • 能否再请教一下这个问题。我已编辑
【解决方案2】:

您可以使用 list.get(i) 访问 ArrayList 的元素。例如:

int[] array1 = B_Blocks.get(0);

希望有帮助!

【讨论】:

  • No..no 如果我要把它们放回另一个数组中,为什么我要把它们放在一个列表中。
  • 我只是说这就是您可以访问列表元素之一的方式。你可以用它做任何你想做的事情。
  • 所以没有办法访问arraylist中的数组,而不是只访问arraylist
  • 好吧,既然你在添加它们之前已经给它们都命名了,你仍然可以用你给它们的名字来引用它们。
  • @awolfe91.. 我在数组列表中添加了每个数组,这样我就可以通过数组列表访问每个数组。即不需要一次调用每个数组来调整值,现在的问题是我是否有这种能力,如果是的话,确切的语法是什么。谢谢
【解决方案3】:

或许我们应该回到最初的需求:

将这个二维数组拆分为 8*1D 数组需要什么(每个块 1 个)

我需要一种方法来索引数组列表中的数组

您可以像这样使用二维数组:

  • Key[0] 会给你第一个子数组 (='row'),Key[1] 第二个,依此类推。
  • Key[0][0] 会给你第一个子数组中的第一个元素,Key[0][1] 第二个,依此类推。访问一个元素,比如说Key[0][5],也可以表述为

    int[] firstRow = Key[0];
    doSomethingWith(firstRow[5]);
    

第一行让引用firstRow 指向Key[0],即。 e.第一个子数组。 firstRowKey[0] 指向同一个数组——当你声明时,你似乎认为数组被复制了:

No..no 如果我要将它们取回并放在另一个数组中,为什么我要把它们放在一个列表中。

ArrayList 问题:

P.S 数组列表的全部意义在于稍后通过 forloops 获得更多操作的访问权限。任何帮助谢谢

如果您使用 ArrayLists 重新构建该结构,一切都会变得更容易 - 除非您想将元素分别添加到数组 ArrayLists。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 2012-08-27
    • 2023-03-15
    • 2017-04-18
    • 2018-05-29
    • 1970-01-01
    相关资源
    最近更新 更多