2011-03-12 4 views
5

내 응용 프로그램은 TreeMap을 사용하여 데이터 정렬을 유지하고 로그 (n) 조회 & 개 삽입을 갖습니다. 이것은 앱이 실행되는 동안 일반적인 경우에 훌륭하게 작동하지만 앱이 처음 시작될 때 나는 (오름차순)으로 정렬 된 에 들어있는 수백만 개의 long으로 TreeMap을 초기화해야합니다.사전 정렬 된 데이터로 TreeMap을 초기화하는 방법은 무엇입니까?

이 초기화 값은 이므로 이미으로 정렬되었으므로 트리 삽입 및 재조정에 대한 log (n) 비용을 지불하지 않고 TreeMap에 삽입 할 수있는 방법이 있습니까?

+0

나는 개인적으로 매우 놀랄 것입니다. – corsiKa

+0

'초기화 값'데이터 구조 란 무엇입니까? 명부? 또는 HashMap? –

답변

10

확실! TreeMap.putAll 메서드 (및 SortedMap을 사용하는 TreeMap 생성자)는 내부적으로 buildFromSorted이라는 메서드를 호출합니다.이 메서드는 "정렬 된 데이터의 선형 시간 트리 작성 알고리즘"으로 문서에 설명되어 있으므로 원하는대로 처리됩니다.

putAll 메소드에 Map을 구현하는 메소드를 지정하면되지만 맵의 entryset 반복자 (Map.entrySet().iterator())는 정렬 된 값 목록을 리턴합니다.

+0

감사합니다. 이것은 꼭 필요한 것이지만, 초기화 목록의 목록을 SortedMap처럼 보이는 것으로 바꾸는 데는 다소 시간이 걸릴 것입니다. –

+0

실제로 그렇지 않을 수도 있습니다. LinkedHashMap 사용법에 대한 답변을 편집했습니다. 순서대로 숫자를 넣으면됩니다. 반복자는 추가 한 순서를 그대로 유지합니다. – Neil

+2

LinkedHashMap은 SortedMap 인터페이스를 구현하지 않으므로 buildFromSorted 메서드가 사용되지는 않을 것이라고 생각합니다. 대신 SortedMap의 익명 구현을 작성해야합니다. 내부적으로 익명 구현체 인 Seted와 익명 구현체 인 Entry를 내부적으로 구현해야합니다. 추악하고 죄악으로 장황한,하지만 일을 않습니다. –