我怎样才能申报一个;“无限”;Java中的2D数组?

我怎样才能申报一个;“无限”;Java中的2D数组?,java,arrays,Java,Arrays,我希望在我的程序中有一个无限的2D数组。对于二维阵列,我有以下代码: int a[][]=new int[10][10]; 但问题是数组的长度是固定的,具有行和列值。数组的大小是固定的。一旦声明了具有一定长度的内容,以后就无法更改 您可能需要一个在不断添加项目的同时动态增加大小的 如果您正在寻找2D,ArrayList of ArrayList将是一个选项 List<List<Integer>> listOfLists = new ArrayList<ArrayL

我希望在我的程序中有一个无限的2D数组。对于二维阵列,我有以下代码:

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

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

数组的大小是固定的。一旦声明了具有一定长度的内容,以后就无法更改

您可能需要一个在不断添加项目的同时动态增加大小的

如果您正在寻找2D,ArrayList of ArrayList将是一个选项

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

List listOfLists=new ArrayList

数组的大小是固定的。一旦声明了具有一定长度的内容,以后就无法更改

您可能需要一个在不断添加项目的同时动态增加大小的

如果您正在寻找2D,ArrayList of ArrayList将是一个选项

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

List-listOfLists=new-ArrayList

正如Kayaman评论的那样,java中的数组大小是固定的,如

数组创建表达式指定元素类型、嵌套数组的级别数以及至少一个嵌套级别的数组长度。数组的长度作为最终实例提供可变长度

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

  • 使用变量指定所需的数组extact大小:

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

  • 最佳选择

  • 使用具有动态大小的,并且您可以添加元素而无需考虑大小(但直到无限,直到
    Integer.MAX_VALUE

    为什么是8043?我使用了一个快速测试来查看实际机器中的最大堆大小,2gb RAM,不关心哪个值
    I
    启动,总是中断(在我的机器中,尝试创建
    int[8044][8044]


  • 正如Kayaman所评论的,java中的数组大小是固定的,如

    数组创建表达式指定元素类型、嵌套数组的级别数以及至少一个嵌套级别的数组长度。数组的长度作为最终实例提供可变长度

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

  • 使用变量指定所需的数组extact大小:

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

  • 最佳选择

  • 使用具有动态大小的,并且您可以添加元素而无需考虑大小(但直到无限,直到
    Integer.MAX_VALUE

    为什么是8043?我使用了一个快速测试来查看实际机器中的最大堆大小,2gb RAM,不关心哪个值
    I
    启动,总是中断(在我的机器中,尝试创建
    int[8044][8044]


  • 不确定是否可以创建流,但在Java8中可以有无限的流


    不确定是否可以创建流,但在Java8中可以有无限的流


    声明自己是一个类
    ,其中
    等于
    哈希码
    ——类似于以下内容:

        class Point {
    
            private final int x;
            private final int y;
    
            public Point(int x, int y) {
                this.x = x;
                this.y = y;
            }
    
            public int getX() {
                return x;
            }
    
            public int getY() {
                return y;
            }
    
            @Override
            public int hashCode() {
                int hash = 7;
                hash = 79 * hash + this.x;
                hash = 79 * hash + this.y;
                return hash;
            }
    
            @Override
            public boolean equals(Object obj) {
                if (obj == null) {
                    return false;
                }
                if (getClass() != obj.getClass()) {
                    return false;
                }
                final Point other = (Point) obj;
                if (this.x != other.x) {
                    return false;
                }
                if (this.y != other.y) {
                    return false;
                }
                return true;
            }
    
        }
    
    然后使用:

    Map<Point,Value> twoDArray= new HashMap<>();
    

    如果您的数组可能是稀疏的,那么有许多特殊类可以使用。

    声明您自己是一个类
    ,其中
    等于
    hashCode
    -类似这样:

        class Point {
    
            private final int x;
            private final int y;
    
            public Point(int x, int y) {
                this.x = x;
                this.y = y;
            }
    
            public int getX() {
                return x;
            }
    
            public int getY() {
                return y;
            }
    
            @Override
            public int hashCode() {
                int hash = 7;
                hash = 79 * hash + this.x;
                hash = 79 * hash + this.y;
                return hash;
            }
    
            @Override
            public boolean equals(Object obj) {
                if (obj == null) {
                    return false;
                }
                if (getClass() != obj.getClass()) {
                    return false;
                }
                final Point other = (Point) obj;
                if (this.x != other.x) {
                    return false;
                }
                if (this.y != other.y) {
                    return false;
                }
                return true;
            }
    
        }
    
    然后使用:

    Map<Point,Value> twoDArray= new HashMap<>();
    

    如果你的数组很可能是稀疏的,那么有很多特殊的类可以做到。

    Java中的数组是固定大小的。你说的“无限”是指永远存在的数组吗?你看过ArrayList吗?(正如你所知道的,它们不会持续下去)取决于矩阵的稀疏程度,你可以考虑实现数组的结构,每个数组代表一个巨大的(大部分是空的)整体的一小部分。如果你解释为什么它需要“无限”,那么你可能会得到更好的答案。您似乎希望在不指定最大X或Y的情况下为某些X,Y坐标设置int值。您无法在内存中存储无限的数据,因此显然,您需要考虑何时需要初始化和/或修改特定的X,Y坐标值(或值的2D范围)以及何时需要读取该值。当需要向用户显示信息时,您可能需要加载有限2D数组的“页面”,或者如果数据非常稀疏,则映射可能是最佳解决方案。Java中的数组大小固定。所谓“无限”,是指永远持续的数组?你看过ArrayList吗?(正如你所知道的,它们不会持续下去)取决于矩阵的稀疏程度,你可以考虑实现数组的结构,每个数组代表一个巨大的(大部分是空的)整体的一小部分。如果你解释为什么它需要“无限”,那么你可能会得到更好的答案。您似乎希望在不指定最大X或Y的情况下为某些X,Y坐标设置int值。您无法在内存中存储无限的数据,因此显然,您需要考虑何时需要初始化和/或修改特定的X,Y坐标值(或值的2D范围)以及何时需要读取该值。当需要向用户显示信息时,您可能需要加载有限2D数组的“页面”,或者如果数据非常稀疏,则映射可能是最佳解决方案。我会注意到,在这种情况下,“无限”将是
    整数。对于每个列表的大小,最大值为
    。应该是list,根据他所说的asked@KevinEsche我假设
    infinite
    在某种意义上,随着时间的推移添加元素。我认为这需要对Java新手发出健康警告:这个答案很好,但是如果你使用它,请注意你正在使用的,因此@sᴜʀᴇsʜᴀᴛᴛᴀ 在某种意义上说是无限的,随着时间的推移,将元素添加到行和列中我会注意到,在这种情况下,“无限”对于每个列表的大小是
    Integer.MAX\u值asked@KevinEsche我假设