나는 읽기/쓰기 성능에 대해 과감히 신경 쓰지 않는다. (가능한 한 빨리 분명히 항상 좋다) 오히려 가능한 한 메모리 효율이 높은 정렬 된 컬렉션 구현을 찾고있다. 어떤 제안?어떤 소트 콜렉션 구현이 Java에서 메모리 공간이 가장 적은가?
답변
그럼 정확히 원하는 크기의 배열로 저장하고 정렬하십시오. O (n log n)의 1 회 작업. 그 이후의 각 검색은 O (log n)입니다. 정렬 된 배열을 Arrays.asList()를 사용하여 List에 쉽게 전달할 수 있습니다.
몇개의 요소를 가지고 있을지 알고 있으면, 공간을 낭비하지 않고 ArrayList를 만들 수 있습니다. 이것은 약간 사용하기 쉬울 것입니다. – MatrixFrog
만약 당신이 앞으로 몇개의 아이템을 가지고 있는지 알지 못한다면, 모든 작업에 arraylist를 사용하고 트리밍 할 수 있습니다 : Collections.sort (list = new ArrayList()); list.trimToSize(); – Karussell
Fibonacci Heap으로 저장하지 않으시겠습니까? 그들은 빠르고, 작고, 효과적입니다. 너무 복잡하면 다른 여러 유형의 힙 구현을 살펴볼 수 있습니다. 많은 힙을 배열로 저장할 수 있습니다. 즉, 컬렉션에 개체가있는만큼의 저장 공간 만 필요합니다.
fibonacci는 메모리가 효율적이지 않습니다. – Karussell
가장 작은 정렬 컬렉션은 ArrayList
입니다. 기본 배열보다 훨씬 크지 않습니다. sort()
을 호출하면 내용이 정렬됩니다.
TreeSet
은 적절한 메모리 보존과 시간 성능을 제공합니다. O (log n) 삽입/찾아보기.
google-collections에서 ImmutableSortedSet은 사용자 요구 사항 ("정렬 된 컬렉션 구현")을 충족시키는 것으로 알고 있지만 수정할 수없는 가장 작은 것입니다.
- 1. 어떤 순환 대기열 구현이 가장 적합합니까?
- 2. 300MB의 메모리 공간이 부족합니까?
- 3. Java : 콜렉션 임의 콜렉션 컬렉션을 통한 콜렉션
- 4. 어떤 mem cache 구현이 빌드하는데 최소한의 노력을해야합니까?
- 5. 아래에서 위로 머지 소트
- 6. Java에서 AJP 프로토 콜 구현이 있습니까?
- 7. 가장 효율적인 Java 원시 콜렉션 라이브러리
- 8. Java에서 메모리 할당
- 9. Ruby의 어떤 구현이 살아남을 수 있습니까?
- 10. Java에서 XML을 구문 분석하는 가장 메모리 효율적인 방법은 무엇입니까?
- 11. Java에서 메모리 누출을 일으키는 가장 쉬운 방법은 무엇입니까?
- 12. JNA를 사용하여 Java에서 네이티브 C 호출을 수행하는 메모리 공간이 매우 많습니다.
- 13. Java에서 어떤 작업을 수행합니까?
- 14. Java에서 배열의 일부를 삭제하여 힙의 메모리 해제
- 15. Java에서 Unsafe를 사용하여 메모리 쓰기/읽기
- 16. 디스크에 스풀링하는 Java 콜렉션
- 17. Java : 가비지 콜렉션
- 18. Java에서 메모리 맵핑 된 파일
- 19. 병렬 퀵 소트 : 부스트 바인드를 사용한 재귀?
- 20. 자바에서 가비지 콜렉션 쓰레드의 우선 순위를 올릴 수 있습니까?
- 21. 가비지 수집 : 에덴 공간이 빠르게 채워집니다. 메모리 누출 때문입니까?
- 22. 빈 공간이
- 23. DataSet과 다른 .NET 콜렉션 클래스의 메모리 비용은 얼마입니까?
- 24. 목록을 최적화하십시오. <T>. 소트 (Comparer)
- 25. 콜렉션 큐
- 26. Android, 콜렉션
- 27. 콜렉션 정렬
- 28. 어떤 .Net Framework generic 콜렉션 유형이이 (키) 기능을 허용/제공합니까?
- 29. 어떤 큐가 가장 적합합니까?
- 30. Java에서 클라이언트 서버 통신 - 어떤 방법을 사용합니까?
음 * 데이터를 메모리에 압축 된 형태로 저장하면 최적의 메모리 사용량에 가까워 질 수 있지만 성능은 정말 좋지 않을 수 있습니다. 나는 대신 메모리와 퍼포먼스 사이의 현명한 트레이드 오프를 찾고 필요하다면 컴퓨터에 더 많은 메모리를 구입할 것을 제안한다. 기억은 싸다. –
그리고 데이터가 실제로 크기가 크거나 (멀티 기가 바이트 또는 테라 바이트) 큰 경우 메모리에 저장하는 대신 데이터베이스에 저장하고 찾아보기에 사용하는 열에 인덱스를 넣어야합니다. 분명히 이것은 메모리에 저장하는 것보다 훨씬 더 느리지 만 데이터는 디스크에 저장되므로 메모리가 아닌 디스크 용량에 의해서만 제한됩니다. –