gpt4 book ai didi

java - Guava 中的 3D 映射数据结构

转载 作者:行者123 更新时间:2023-11-29 05:24:31 25 4
gpt4 key购买 nike

我正在为基于约束的大学考试安排实现遗传算法。为了有效地进行约束检查,我需要包含评估前大部分信息的数据结构。

现在我正在使用 Guava 中的 Table 结构,如下所示:

Table<Integer, Integer, ArrayList<Student>> clashesMatrix = HashBasedTable.create();

这意味着我在二维矩阵中的考试 i 和考试 j 之间有共同的学生。但是现在我希望更进一步,让学生在 3 次考试之间有共同之处,即我需要一种 3D 矩阵。我需要这个,因为我的约束之一是为学生连续检查两到三个连续的考试,在检查约束之前拥有此类数据会更有效。

Guava 中是否有特定的数据结构可用于此目的?或者有什么方法可以更改上表以适应三门考试?

非常感谢您的帮助,因为这是我的学位论文!谢谢:)

最佳答案

你的 previous question已经瞄准了类似的方向。现在你需要另一个维度。并且您添加了(重要!)信息,即 始终为 Integer值。正如我在回答您之前的问题时提到的,自动装箱/自动拆箱可能会对性能产生影响,但这应该只对“大”数据结构(故意不提及“大”到底是什么意思)值得注意。

对于一般的“N 维”索引,您可以考虑使用自己的键类型。特别是,类似 IntTuple 的东西. (事实上​​,您可以使用 List<Integer> 作为键类型,但这可能有一些缺点)。有了这样一个IntTuple类,正确实现了 hashCodeequals ,您可以轻松定义任意的 N 维数据结构,可以以方便高效的形式使用:

Map<IntTuple, List<Student>> map = new HashMap<IntTuple, List<Student>>();

List<Student> students = new ArrayList<Student>();

map.put(IntTuple.of(1,2,3), students);

List<Student> s = map.get(IntTuple.of(1,2,3));

但是,请注意,根据您要进行的确切查询,不同的结构可能更合适。例如,此结构不允许允许像

这样的查询

"Give me all students where the second element of the 'key tuple' has the value 'x'"

如果您需要这种查询,那么不同的数据结构可能更合适。


(我的“片段目录”中有这样一个 IntTuple 类,为方便起见,我将其插入此处...)

import java.util.Arrays;

class IntTuple
{
static IntTuple of(int ... values)
{
return new IntTuple(values);
}

private final int data[];
private IntTuple(int ... data)
{
this.data = data;
}

public int getDimensions()
{
return data.length;
}

public int get(int index)
{
return data[index];
}
@Override
public String toString()
{
return Arrays.toString(data);
}
@Override
public int hashCode()
{
return Arrays.hashCode(data);
}
@Override
public boolean equals(Object object)
{
if (this == object)
{
return true;
}
if (object == null)
{
return false;
}
if (!(object instanceof IntTuple))
{
return false;
}
IntTuple other = (IntTuple)object;
return Arrays.equals(data, other.data);
}
}

关于java - Guava 中的 3D 映射数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23196574/

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