2009-12-30 3 views
0

나는 읽기/쓰기 성능에 대해 과감히 신경 쓰지 않는다. (가능한 한 빨리 분명히 항상 좋다) 오히려 가능한 한 메모리 효율이 높은 정렬 된 컬렉션 구현을 찾고있다. 어떤 제안?어떤 소트 콜렉션 구현이 Java에서 메모리 공간이 가장 적은가?

+0

음 * 데이터를 메모리에 압축 된 형태로 저장하면 최적의 메모리 사용량에 가까워 질 수 있지만 성능은 정말 좋지 않을 수 있습니다. 나는 대신 메모리와 퍼포먼스 사이의 현명한 트레이드 오프를 찾고 필요하다면 컴퓨터에 더 많은 메모리를 구입할 것을 제안한다. 기억은 싸다. –

+1

그리고 데이터가 실제로 크기가 크거나 (멀티 기가 바이트 또는 테라 바이트) 큰 경우 메모리에 저장하는 대신 데이터베이스에 저장하고 찾아보기에 사용하는 열에 인덱스를 넣어야합니다. 분명히 이것은 메모리에 저장하는 것보다 훨씬 더 느리지 만 데이터는 디스크에 저장되므로 메모리가 아닌 디스크 용량에 의해서만 제한됩니다. –

답변

3

그럼 정확히 원하는 크기의 배열로 저장하고 정렬하십시오. O (n log n)의 1 회 작업. 그 이후의 각 검색은 O (log n)입니다. 정렬 된 배열을 Arrays.asList()를 사용하여 List에 쉽게 전달할 수 있습니다.

+2

몇개의 요소를 가지고 있을지 알고 있으면, 공간을 낭비하지 않고 ArrayList를 만들 수 있습니다. 이것은 약간 사용하기 쉬울 것입니다. – MatrixFrog

+1

만약 당신이 앞으로 몇개의 아이템을 가지고 있는지 알지 못한다면, 모든 작업에 arraylist를 사용하고 트리밍 할 수 있습니다 : Collections.sort (list = new ArrayList()); list.trimToSize(); – Karussell

1

Fibonacci Heap으로 저장하지 않으시겠습니까? 그들은 빠르고, 작고, 효과적입니다. 너무 복잡하면 다른 여러 유형의 힙 구현을 살펴볼 수 있습니다. 많은 힙을 배열로 저장할 수 있습니다. 즉, 컬렉션에 개체가있는만큼의 저장 공간 만 필요합니다.

+0

fibonacci는 메모리가 효율적이지 않습니다. – Karussell

2

가장 작은 정렬 컬렉션은 ArrayList입니다. 기본 배열보다 훨씬 크지 않습니다. sort()을 호출하면 내용이 정렬됩니다.

0

TreeSet은 적절한 메모리 보존과 시간 성능을 제공합니다. O (log n) 삽입/찾아보기.

0

google-collections에서 ImmutableSortedSet은 사용자 요구 사항 ("정렬 된 컬렉션 구현")을 충족시키는 것으로 알고 있지만 수정할 수없는 가장 작은 것입니다.

관련 문제