내가 진행중인 프로젝트에서 큰 데이터 세트에 다차원 피벗을 만들려고합니다. 나는 int
들로 사용할 모든 키를, 그래서 기본적으로, 나는 그것이 거대한 얻을 수 있습니다, 나는이 N 차원 배열을 사용할 수 없습니다빠른 원시적 int 다중 키 맵?
(int1, int2, int3, .. intN) -> (Aggregate1, Aggregate2, ... , AggregateM)
의 집합을 반환하려면 아마 될 것입니다 부족한. 나는 Trove를 보았지만 Multi-key map이 없다. 아파치 공유는 다중 키 맵을 가지고 있지만, 이는 Objects
을위한 것이다; 아마도 작동 할 것이지만, int
이 자동 상자 화되어 Integers
이되고, 그 반대의 경우도 마찬가지입니다.
누구나 원시 다중 키 맵 구현을 알고 있습니까? (객체에 매핑 된)
또는 다른 사람에게 좋은 힌트가 있습니까? 더 좋은 방법이 있습니까?
[편집] 삽입 시간이 덜 흥미로 우며,지도가 값을 검색하는 데 많이 사용되므로 조회시 성능이 필요합니다.
[편집 2] 모든 답변 주셔서 감사합니다. 내 구현 선택은 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;
}
}
'SparseArray'의 소스 코드를보고 다중 키를 사용하도록 수정할 수 있습니다. –
"멀티 키"가 정확히 무엇을 의미합니까? – chrylis
다중 키 : 하나의 키에 여러 항목이 결합되어 있습니다. 예를 들어 Apache Commons에는 CombinedKey가 'Objects'로 구성된 다중 키 맵이 있습니다. – RobAu