2011-09-05 3 views
2

SortedSet 구현에 많은 수의 Long 값을 공간 효율적으로 저장해야합니다. 비트 세트 구현을 고려하고 Javaewah을 발견했습니다. 그러나 API는 long이 아닌 int 값을 필요로합니다.압축 된 SortedSet <Long> 구현

누구든지 대안을 추천하거나이 문제를 해결하기위한 좋은 방법을 제안 할 수 있습니까? 나는 주로 공간 효율성에 관심이있다. 세트를 만들 때 최소 및 최대 요소에 한 번 액세스해야합니다. 그러나 액세스 시간은 큰 관심사가 아닙니다 (즉, 전체 실행 길이로 인코딩 된 구현은 괜찮을 것입니다).

편집

내가 구현 내가 최소 및 컬렉션의 최대의 요소에 액세스 할 수 있습니다 제공하는 SortedSet 인터페이스를 구현에없는 것이 분명해야한다. 이 설정 한 경우

+0

분 (min)과 최대 (max)를 찾기 위해서만 longs를 저장해야합니까? –

+0

예, 그렇지만 건물을 만들 때 세트에서 요소를 제거 할 수 있습니다. 따라서 모든 요소를 ​​저장해야하는 이유는 무엇입니까? – Adamski

+0

"많은 수의 긴 값"이란 무엇입니까? –

답변

1

당신은 아래에 long[]를 사용 TLongArrayList를 사용할 수 있습니다. sort()을 지원하므로 min 및 max가 첫 번째이자 마지막 값이됩니다.

또는 long[] 길이를 사용하여 직접 처리 할 수 ​​있습니다. ;)

이렇게하면 원시 값 자체보다 약 64 바이트가 더 많이 사용됩니다. 긴 값의 범위에 대해 몇 가지 가정을 할 수 있다면 더 작아 질 수 있습니다. 예 : 실제로 48 비트로 제한됩니다.

LongBuffer를 사용해보십시오. 매핑 된 메모리 인 경우 힙 또는 직접 메모리 사용을 피할 수 있지만 직접 정렬 루틴을 구현해야합니다.


클러스터 된 경우 데이터를 범위 집합으로 나타낼 수 있습니다. 범위는 순수한 A - B이거나 시작 값을 가진 BitSet 일 수 있습니다. 나중에 전화 번호를 잘 작동합니다. ;)

+0

그 수업은 Trove 출신입니다. 나는 어느 쪽이 더 효율적인지, Trove 또는 Apache primitives를 궁금해한다. –

+0

메모리 효율성 측면에서 어떤 차이는 배열을 확장하는 방법에있을 수 있습니다. 즉 긴 [] 중 얼마가 사용되지 않을 것인가. –

관련 문제