【问题标题】:how to create dynamic two dimensional array in java?如何在java中创建动态二维数组?
【发布时间】:2011-02-12 00:52:09
【问题描述】:

我想动态创建一个二维数组。

我知道列数。但是行数正在动态更改。我尝试了数组列表,但它仅将值存储在一维中。我能做什么?

【问题讨论】:

  • 您尝试过列表列表吗?像 List>

标签: java multidimensional-array


【解决方案1】:

由于列数是一个常数,您可以只拥有Listint[]

    import java.util.*;
    //...

    List<int[]> rowList = new ArrayList<int[]>();

    rowList.add(new int[] { 1, 2, 3 });
    rowList.add(new int[] { 4, 5, 6 });
    rowList.add(new int[] { 7, 8 });

    for (int[] row : rowList) {
        System.out.println("Row = " + Arrays.toString(row));
    } // prints:
      // Row = [1, 2, 3]
      // Row = [4, 5, 6]
      // Row = [7, 8]

    System.out.println(rowList.get(1)[1]); // prints "5"

由于它由List 支持,因此行数可以动态增加和减少。每行后面都有一个int[],这是静态的,但是你说列数是固定的,所以这不是问题。

【讨论】:

  • 应该做哪些改变来实现一个固定行但可变列的arrayList?
  • 这是什么答案..?如果我们想定义任何常量,我们可以简单地使用一个数组... Java 是否有一个 C++ 等效向量类,您可以在其中动态添加行和列(无需编写自己的..)?
【解决方案2】:

Java 中没有多维数组,但是有数组的数组。

只需创建一个任意大小的数组,然后为每个元素创建另一个数组,无论您想要多大。

int array[][];

array = new int[10][];

array[0] = new int[9];
array[1] = new int[8];
array[2] = new int[7];
array[3] = new int[6];
array[4] = new int[5];
array[5] = new int[4];
array[6] = new int[3];
array[7] = new int[2];
array[8] = new int[1];
array[9] = new int[0];

或者:

List<Integer>[] array;

array = new List<Integer>[10];

// of you can do "new ArrayList<Integer>(the desired size);" for all of the following
array[0] = new ArrayList<Integer>();
array[1] = new ArrayList<Integer>();
array[2] = new ArrayList<Integer>();
array[3] = new ArrayList<Integer>();
array[4] = new ArrayList<Integer>();
array[5] = new ArrayList<Integer>();
array[6] = new ArrayList<Integer>();
array[7] = new ArrayList<Integer>();
array[8] = new ArrayList<Integer>();
array[9] = new ArrayList<Integer>();

【讨论】:

  • 应该被接受,因为它显示了没有 - 和有 - 数组列表的实际方式。
【解决方案3】:

二维字符串数组的另一个例子:

public void arrayExam() {
    List<String[]> A = new ArrayList<String[]>();
    A.add(new String[] {"Jack","good"});
    A.add(new String[] {"Mary","better"});
    A.add(new String[] {"Kate","best"});
    for (String[] row : A) {
        Log.i(TAG,row[0] + "->" + row[1]);
    }
}

输出:

17467 08-02 19:24:40.518  8456  8456 I MyExam  : Jack->good
17468 08-02 19:24:40.518  8456  8456 I MyExam  : Mary->better
17469 08-02 19:24:40.518  8456  8456 I MyExam  : Kate->best

【讨论】:

    【解决方案4】:

    如何制作一个包含数组的自定义类,并使用自定义类的数组。

    【讨论】:

      【解决方案5】:

      尝试制作Treemap &lt; Integer, Treemap&lt;Integer, obj&gt; &gt;

      在 java 中,Treemap 是有序映射。并且行和列中的项目数不会影响您要设置的二维索引。 然后你可以得到一个类似结构的列表。

      【讨论】:

      • 在 Java 中实现相当大的 2D 数组的一种很好的通用方法。但是,您必须使用 Integer,因为原语不能是 Treemap 的键。
      【解决方案6】:

      这是一个简单的例子。 这个方法会返回一个二维的tType数组

      public tType[][] allocate(Class<tType> c,int row,int column){
              tType [][] matrix = (tType[][]) Array.newInstance(c,row);
              for (int i = 0; i < column; i++) {
                  matrix[i] = (tType[]) Array.newInstance(c,column);
              }
              return matrix;
      
          }
      

      假设你想要一个二维字符串数组,然后调用这个函数

      String [][] stringArray = allocate(String.class,3,3);
      

      这将为您提供一个 3 行 3 列的二维字符串数组; 请注意,Class&lt;tType&gt; c -> c 不能是原始类型,例如 intchardouble。它必须是非原始的,例如 StringDoubleInteger 等等。

      【讨论】:

      • 这段代码不能为我编译,我在“tType”上得到一个编译错误。可以给个完整的代码吗?
      【解决方案7】:
      Scanner sc=new Scanner(System.in) ;
      int p[][] = new int[n][] ;
      for(int i=0 ; i<n ; i++)
      {
          int m = sc.nextInt() ;      //Taking input from user in JAVA.
          p[i]=new int[m] ;       //Allocating memory block of 'm' int size block.
      
          for(int j=0 ; j<m ; j++)
          {
               p[i][j]=sc.nextInt();   //Initializing 2D array block.
          }
       }
      

      【讨论】:

      • 请添加一点解释 - 裸代码块并不能提供全部信息。
      【解决方案8】:
      List<Integer>[] array;  
      array = new List<Integer>[10]; 
      

      @TofuBeer 回答中的第二种情况不正确。因为无法使用泛型创建数组。你可以使用:

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

      【讨论】:

        【解决方案9】:

        你想初始化一个二维数组并分配一个数组大小然后 一个例子是

           public static void main(String args[])
           { 
            char arr[][];   //arr is 2d array name
            arr = new char[3][3]; 
            }
        
        
           //this is a way to inialize a 2d array in java....  
        

        【讨论】:

          猜你喜欢
          • 2013-05-02
          • 2015-07-15
          • 1970-01-01
          • 2013-02-22
          • 2011-08-14
          • 2020-05-20
          • 2017-06-01
          • 2019-04-19
          • 2016-12-18
          相关资源
          最近更新 更多