我需要能够有一个n维场,其中n是基于构造函数的输入.但我甚至不确定是否可能.是吗?
解决方法
快速解决方案:您可以使用与您需要的深度一致的ArrayList的非通用ArrayList来近似它.然而,这可能会很尴尬地使用相当快.
需要更多工作的替代方案可能是使用底层平面数组表示来实现自己的类型,您可以在其中内部计算索引,并使用vararg参数提供访问器方法.我不知道它是否完全可行,但可能值得一试
粗体例(未测试,无溢出检查,错误处理等,但希望传达基本思想):
class NDimensionalArray {
private Object[] array; // internal representation of the N-dimensional array
private int[] dimensions; // dimensions of the array
private int[] multipliers; // used to calculate the index in the internal array
NDimensionalArray(int... dimensions) {
int arraySize = 1;
multipliers = new int[dimensions.length];
for (int idx = dimensions.length - 1; idx >= 0; idx--) {
multipliers[idx] = arraySize;
arraySize *= dimensions[idx];
}
array = new Object[arraySize];
this.dimensions = dimensions;
}
...
public Object get(int... indices) {
assert indices.length == dimensions.length;
int internalIndex = 0;
for (int idx = 0; idx < indices.length; idx++) {
internalIndex += indices[idx] * multipliers[idx];
}
return array[internalIndex];
}
...
}