int arr[][] = new int[] {
new int[3],
new int[4],
new int[5]
};
固定阵列可以这样做,但可能会很尴尬。使用带有对象包装器的一维数组通常更容易:
public class Chessboard {
public final static DEFAULT_X = 8;
public final static DEFAULT_Y = 8;
public final static DEFAULT_SIZE = DEFAULT_X * DEFAULT_Y;
private final int x;
private final int y;
private final int size;
private final Piece squares[];
public Chessboard() {
this(DEFAULT_X, DEFAULT_Y);
}
public Chessboard(int x, int y) {
if (x < 2) {
throw new IllegalArgumentException("x (" + x + ") must be 2+");
}
if (y < 2) {
throw new IllegalArgumentException("y (" + y + ") must be 2+");
}
this.x = x;
this.y = y;
size = x * y;
pieces = new Piece[size];
}
public Piece get(int x, int y) {
return pieces[y * this.x + x];
}
public Piece get(String xy) {
// eg 'h3' => (7,2)
return get(xy.charAt(0) - 'a', xy.charAt(1) - '0');
}
// etc
}
当然,这可以通过数组的数组来实现
稀疏数组往往在Java中通过映射实现:
public class Sparse2DArray<T> {
public final static int MAX_X = 8192;
public final static int MAX_Y = 8192;
private final Map<String, T> array = new HashMap<String, T>();
private final Pattern XY = Pattern.compile("^([A-Za-z]+)([0-9]+)");
public T get(int x, int y) {
if (x < 0 || x >= MAX_X) {
throw new IllegalArgumentException("x (" + x + ") must be 0 to " + (MAX_X-1));
}
if (y < 0 || y >= MAX_Y) {
throw new IllegalArgumentException("y (" + y + ") must be 0 to " + (MAX_Y-1));
}
return array.get(x + "," + y);
}
public T get(String xy) {
Matcher m = XY.matcher(xy);
if (!m.matches()) {
throw new IllegalArgumentException("xy (" + xy + ") must be letters followed by digits");
}
String s = m.group(1).toUpperCase();
int multiplier = 1;
int x = 0;
for (int i=s.length()-1; i>=0; i--) {
x += (s.chartAt(i) - 'A') * multiplier;
multiplier *= 26;
}
int y = Integer.valueOf(m.group(2));
return array.get(x, y);
}
// etc
}
# 1 楼答案
如果您正在寻找一个电子表格类型的应用程序(可能是错误地从spring框架标记和B-1/C-2名称中推断出来的),稀疏数组可能是一个不错的选择
Colt有一个这样的实现
我回答了一个类似的问题
# 2 楼答案
我假设您需要Java中的数据结构来存储这些值
可以使用以下语法在Java中定义2D数组
请注意,数组只能保存1个数据类型的值。可以使用以下方法取消对特定项的引用
对于您的特定示例,您还可以使用java。util。映射类并将数据存储为键值对,但这要求“键”是唯一的。e、 g
# 3 楼答案
多维数组有三种基本类型:
Java没有本机多维数组类型。Java有数组的数组,这是不完全相同的事情。例如,这是合法的Java:
固定阵列可以这样做,但可能会很尴尬。使用带有对象包装器的一维数组通常更容易:
当然,这可以通过数组的数组来实现
稀疏数组往往在Java中通过映射实现:
您还可以通过构造一个N维键类作为映射键来实现这一点。它将需要定义适当的
equals()
和hashCode()
方法,可能是一个更干净的解决方案,但上述方法将起作用显然,如果要在稀疏数组类中存储100x100数组的每个值,将有开销(因为所有贴图都有开销)。这带来了密集阵列。稀疏数组仅存储设置值的值。密集数组为每个可能的键(在指定范围内)存储一个值
此外,密集阵列与固定阵列相似,但并不完全相同。固定数组一旦创建就很难扩展(嗯,这是一个昂贵的操作,所以通常是不允许的),而密集数组可能是为了扩展而构建的,比如你可以将它们用于电子表格并扩展最大X和Y值。当用户使用越来越多的单元格时,你可以定义一个包含所有使用值的矩形
# 4 楼答案
我想你需要的是ArrayList的地图:
这样一来,B-1就成了地图。得到(“B”)。get(1)