关于如何存储和使用多维数据的建议



我正在处理一个16x16x16的立方体信息,在每个位置我需要存储一对(int,int)。在大多数用例中,立方体的大部分将保存(0,0),但是每个位置都有可能保存唯一的信息。

可能值得注意的是,(int,int)对中保存的信息之间的唯一关系是它们位于相同的位置。

  1. 第一个值可能只有0-9,但可以是其他值
    • 表示该位置的一个属性。
  2. 第二个值表示一个模式,它将是0-6或1-6的组合,按升序排列(例如12,123456)
    • 描述当前位置与相邻6个位置之间的关系。
    • 第二个值在技术上可以是0-64,但为了我的理智,我使用了这种模式。

我目前只是使用一个3d数组,但考虑到大多数数组保持相同的(0,0)值,这似乎是一个很大的浪费。我还应该提到,在保存和安装期间,我不经常访问这些信息。

如果有人有更好的存储结构的建议,我将非常感谢您的输入。

首先想到的是为Cube、pair和3-tuple定义自己的类,类似于以下内容:

public class IntTuple {
    private final int x;
    private final int y;
    private final int z;
    public Tuple(int x, int y, int z) {
        this.x = x;
        this.y = y;
        this.z = z;
    }
    public int getX() { return x; }
    public int getY() { return y; }
    public int getZ() { return z; }
}

和一个类似的类为你的搭档。然后立方体可以是这样的:

public class Cube {
    private HashMap<IntTuple, IntPair> cubeMap = new HashMap<IntTuple, IntPair>();
    private zeroPair = new IntPair(0, 0);
    public addPair(IntTuple coords, IntPair pair) {
        cubeMap.put(coords, pair);
    }
    public IntPair getPair(IntTuple coords) {
        if (cubeMap.containsKey(coords))
            return cubeMap.get(coords);
        else
            return zeroPair;
    }
}

在存储方面,您减少了一些开销,因为您只存储非零对的坐标,并且您可以快速访问hashmap。只创建一个0对,并且您将始终返回这一个引用。

如果您想要更大的可伸缩性,您可以使用泛型类型创建这三个类,以便您可以重用这些结构来存储整数以外的对象。

相关内容

  • 没有找到相关文章