对于我正在进行的项目,我尝试在大型数据集上创建多维数据透视。我有所有我想用作int
s 的键,所以基本上,我想返回一组
( int1, int2, int3, .. intN ) -> (Aggregate1, Aggregate2, ... , AggregateM)
我不能使用 N 维数组,因为它可能会变得很大并且可能会很稀疏。我看过 Trove,但他们没有多键地图。Apache commons 有一个多键映射,但那是用于Objects
; 这可能会起作用,但似乎不那么有趣,因为int
s 将自动装箱,Integers
反之亦然。
有谁知道原始的多键映射实现?(映射到对象?)
或者,有没有人有很好的提示,也许有更好的方法来解决我的问题?
[编辑] 插入时间不太有趣,我需要查找性能,因为地图将大量用于查找值。
[edit2] 感谢所有的答案。我的实现选择是一个包含 int[] 的自定义类,它是不可变的,因此hashcode
可以根据构建时间计算。
private static class MultiIntKey
{
int[] ints;
private int hashCode;
MultiIntKey( int[] ints )
{
this.ints = ints;
this.hashCode = Arrays.hashCode( this.ints );
}
@Override
public int hashCode()
{
return this.hashCode;
}
@Override
public boolean equals( Object obj )
{
if ( this == obj )
{
return true;
}
if ( obj == null )
{
return false;
}
if ( this.getClass() != obj.getClass() )
{
return false;
}
MultiIntKey other = (MultiIntKey) obj;
if ( this.hashCode != other.hashCode )
{
return false;
}
if ( !Arrays.equals( this.ints, other.ints ) )
{
return false;
}
return true;
}
}