我怎样才能申报一个;“无限”;Java中的2D数组?
我希望在我的程序中有一个无限的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
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我假设