Поскольку все эти ответы делают меня бесполезным, могу ли я просто добавить предложение о том, что вы либо
создаете тип данных для выражения своих данных при инкапсуляции деталей структуры, либопо крайней мере
Создать тип ключа, который оборачивает int [] (но корректно переопределяет equals и hashCode) и вместо этого использовать HashMap?Как правило, редко когда вся ваша трехмерная структура будет сильно заполнена.
Еще лучше, если бы вы могли инкапсулировать эту карту и использовать varargs для чистого доступа.
public class NDimensionalArray<V> {
private final int dimensions;
private final Map<Key, V> values = new HashMap<Key, V>();
private NDimensionalArray(int dimensions) {
this.dimensions = dimensions;
}
public V get(int... indices) {
checkIndices(indices);
return values.get(new Key(indices));
}
public void set(V value, int... indices) {
checkIndices(indices);
values.put(new Key(indices), value);
}
private void checkIndices(int[] indices) {
if ( indices.length != dimensions ) {
throw new IllegalArgumentException();
}
}
private static final class Key {
private final int[] indices;
private Key(int[] indices) {
this.indices = indices;
}
@Override
public int hashCode() {
return Arrays.hashCode(indices);
}
@Override
public boolean equals(Object obj) {
return Arrays.equals(indices, ((Key)obj).indices);
}
}
}
Если у людей есть примеры установленных библиотек коллекций, которые уже делают подобные вещи, дайте мне знать, и я добавлю ссылки.