gpt4 book ai didi

java - 是否使用多维数组,或者带有 hashCodes 的简单数组

转载 作者:行者123 更新时间:2023-12-01 14:53:20 24 4
gpt4 key购买 nike

对于 Java 项目,我需要使用 5 个 ENUM 类型来索引 3 维 double 组,该数组为 3D 直线空间中的多个 XYZ 点中的每个点定义特定属性。像这样组织它会更好吗:

double[][][][][][][][] arr =
new double[enum1Size][enum2Size][enum3Size][enum4Size][enum5Size]
[maxX+1][maxY+1][maxZ+1];

arr[enum1][enum2][enum3][enum4][enum5][x][y][z] = theDouble;

或者通过使用一个简单的数组并使用包含每个枚举的对象的 hashCode 对其进行索引:

class EnumIndex {
Enum1Type enum1;
Enum2Type enum2;
Enum3Type enum3;
Enum4Type enum4;
Enum5Type enum5;

public EnumIndex(Enum1Type enum1, Enum2Type enum2,
Enum3Type enum3, Enum4Type enum4, Enum5Type enum5) {
this.enum1 = enum1;
this.enum2 = enum2;
this.enum3 = enum3;
this.enum4 = enum4;
this.enum5 = enum5;
}

public int hashCode() {
// Eclipse-generated hashcode function
}

public static int maxHashCode() {
// generate maximum hashcode based on maximum ordinal of each enum
}
}

double[][][][] arr = new double[EnumIndex.maxHashcode+1][maxX+1][maxY+1][maxZ+1];

EnumIndex ei1 = new EnumIndex(enum1, enum2, enum3, enum4, enum5);

double[ei1][x][y][z] = theDouble;
  • Enum1Type 有 15 个值。
  • Enum2Type 有 4 个值。
  • Enum3Type 有 4 个值。
  • Enum4Type 有 2 个值。
  • Enum5Type 有 2 个值。

  • X 的范围为 0-9

  • Y 的范围为 0-5
  • Z 范围为 0-22

因此,大约有 1,324,800 个 double 需要编入索引。

我打算使用 EnumMaps 的 EnumMaps,但这似乎有点矫枉过正。处理速度是这个项目的一个大问题,所以我试图避免迭代;强制运行时使用指针算术来获取正确的内存位置。

最佳答案

如果速度是一个严重问题,我建议使用空间索引结构,例如 R 树。特别是,如果您想要索引如此多的元素。我怀疑自制索引无法解决您的问题。

但是,我不知道是否有免费的Java R-tree实现。

编辑:有一个 - http://sourceforge.net/projects/jsi/

关于java - 是否使用多维数组,或者带有 hashCodes 的简单数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14591036/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com