gpt4 book ai didi

java - 如何在 Java 中声明一个 "infinite"二维数组?

转载 作者:行者123 更新时间:2023-11-29 10:00:28 26 4
gpt4 key购买 nike

我想在我的程序中使用无限二维数组。我有以下二维数组代码:

int a[][]=new int[10][10];

但问题是数组是固定长度的,有行值和列值。

最佳答案

正如 Kayaman 评论的那样,java 中的数组是固定 大小,如JLS (§10.3) 中指定的那样。

An array creation expression specifies the element type, the number of levels of nested arrays, and the length of the array for at least one of the levels of nesting. The array's length is available as a final instance variable length.

您有 3 个备选方案,如果第一个在您的情况下不可行,您应该使用第二个:

  1. 使用变量为数组提供您需要的确切大小:

    int numberOfXElement = // get the elements in dynamic way
    int numberOfYElement = // get the elements in dynamic way
    int a[][]=new int[numberOfXElement][numberOfYElement];

最佳选择

  1. 使用 ArrayList它具有动态大小,您可以在不关心大小的情况下添加元素(但直到无穷大,直到 Integer.MAX_VALUE)。

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

    注意:正如评论中指出的那样,请注意您使用的是 Integer and not int .


  1. Integer.MAX_VALUE 大小赋给数组(但必须小心空位置)
    如注释中所指出,语法上是一个正确的表达式,但是你需要大量的 ram 内存来执行它。而不是这样:

    在创建时给数组一个你永远达不到的大数字,但是如果你使用这个选项你必须小心空位置

    int a[][]=new int[8043][8043];

    为什么是 8043?我用一个快速测试来查看我实际机器中的最大堆大小,2gb RAM,不在乎哪个值 i 开始,总是中断(在我的机器中,试图创建一个 int[8044][8044])。

    for (int i = 0; ; i++) {
    int a[][]=new int[i][i];
    System.out.println(i + " " + Arrays.toString(a));
    }

关于java - 如何在 Java 中声明一个 "infinite"二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32478681/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com