【问题标题】:How to create Dynamic Two Dimensional Array [JAVA]如何创建动态二维数组 [JAVA]
【发布时间】:2013-05-02 11:16:28
【问题描述】:

我是 java 新手,我想创建一个二维数组,其中行是静态的,但列是动态的。

double [][] lastSecArray = new double [2][41];
int lastValue = -1;
public foo (){
   lastValue++;
   lastSecArray[0][lastValue] = st_ms;
   //more code here
}

lastValue 的值增加,当它达到 41 时,我的程序让我的数组索引超出范围。这是我应该期待的。

如何使数组的列动态化,以便无论 lastValue 的值增加多大,它都会运行。

【问题讨论】:

  • 一个ArrayList的数组...但是由于Java不允许泛型数组(你可以创建非泛型ArrayList[],但是会有关于类型安全的警告),所以@ 987654324@(行和列都是动态的,但你反正不用担心行)

标签: java list multidimensional-array


【解决方案1】:

使用Map<Double, List<Double>> 可能更合适。将Map 的值作为List<Double> 将允许您扩展列表,而不是具有固定大小的数组。

public static void main(String[] args) throws CloneNotSupportedException {
    Map<Double, List<Double>> myMap = create(1, 3);
}

public static Map<Double, List<Double>> create(double row, double column) {
    Map<Double, List<Double>> doubleMap = new HashMap<Double, List<Double>>();

    for (double x = 0; x < row; x++) {
        for (double y = 0; y < column; y++) {
            doubleMap.put(x, new ArrayList<Double>());
        }
    }
    return doubleMap;
}

【讨论】:

    【解决方案2】:

    尝试使用

    Map<String, ArrayList> lastSecArray = new HashMap<>();
        ArrayList value = new ArrayList();
        value.add(0);
        value.add(1);
        value.add(2);
        lastSecArray.put("0", value);
    

    所以你可以使用

    lastSecArray.size()
    

    lastSecArray.put(...)
    

    或数组中的数组

    【讨论】:

      【解决方案3】:

      请改用ArrayList

      你可以使用:

      List<List<Double>> = new ArrayList<>();
      

      ArrayList 是可动态扩展的。您可以为行和列创建ArrayList

      【讨论】:

        【解决方案4】:

        我假设你来自 C 世界。在 Java 中,您有许多表示数组的对象。

        我建议您查看此链接:ArrayList。这是一个使用可调整大小数组的类。

        我认为这是在 Java 中创建动态二维数组的好方法。

        由于 ArrayList 是一个模板类,您可以创建ArrayList&lt;ArrayList&lt;double&gt;&gt;,或者如果您想要“静态”行数,您可以创建ArrayList&lt;double[2]&gt;

        【讨论】:

          【解决方案5】:

          在 Java 中,数组是固定大小的,所以你说的是不可能的。

          看看这个帖子可能对你有帮助。

          Variable length (Dynamic) Arrays in Java

          【讨论】:

            【解决方案6】:

            如果你在运行时知道元素大小

            int size=runtime decides;
            double [][] lastSecArray = new double [2][size];
            

            【讨论】:

              猜你喜欢
              • 2011-02-12
              • 2015-07-15
              • 2013-02-22
              • 2011-08-14
              • 2011-10-07
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多