2013-01-18 4 views
1

이미 TreeSet을 탐색 할 솔루션이 있습니다. 내 질문은 성능과 관련이 있으며 최적의 방법을 구현 한 방법입니까? 아래 코드 예제를 참조하십시오. 로 새로운 새로운 컬렉션을 만들 :java에서 TreeSet을 마지막 노드에서 처음으로 가로 지르는 최적의 방법은 무엇입니까?

public static void main(String[] args) 
{ 
    TreeSet ts = new TreeSet(); 
    ts.add("F"); 
    ts.add("B"); 
    ts.add("H"); 
    ts.add("Z"); 

    while (!ts.isEmpty()) 
    { 
    String last = (String)ts.last(); 
    System.out.println(last); 
    ts.remove(last); 
    } 
    // OUTPUT: Z H F B 
} 
+0

정말 요소를 삭제해야합니까? –

+0

이것은 질문의 접선이지만 제네릭에 대해 배워야합니다. 그들은 타입 시스템에 많은 것을 추가합니다. – yshavit

+0

@OlegMikheev 아니요. 요소를 삭제하지 않으려 고합니다. .last()를 호출하면 새 마지막 항목을 가져 오도록 요소를 제거합니다. – Wael

답변

3

TreeSet ts = new TreeSet(); 
    Iterator i = ts.descendingIterator(); 
    while(i.hasNext()) { 
     Object next = i.next(); 
    } 

1.6 아래 자바에 대한

for(Object e : ts.descendingSet()) { 
    } 

당신이

TreeSet tmp = new TreeSet(Collections.reverseOrder()); 
    tmp.addAll(ts); 
    for(Object e : tmp) { 
    } 
+0

예,이 작업은 간단하지만 jdk 6에서만 작동합니다. jdk 5에서 작동하지 않습니다. jdk 5를 사용하고 있지만 jdk 5와 호환되는 솔루션을 선호합니다. 6 – Wael

+0

@Wael 6 이전 버전을 지원해야하는 요구 사항이 없으면 솔루션입니다. java.util에 대한 몇 가지 향상된 기능이 있습니다 6에서는 코드를 더 간단하고 깔끔하게 만듭니다. –

+0

@PatriciaShanahan 모두 감사합니다. 나는이 변화와 함께 갈 것이다. 우리가 최근에 JDK 6으로 마이그레이션 한 이래로 받아 들일 수 있습니다. 이클립스에서 저는 ts.descendingIterator() 호출을 표시하지 않은 jdk 5를 여전히 사용하고있었습니다. – Wael

0

JDK가 5 호환 방법을 시도 할 수있는 간단한 보인다 비교기가 반대로되었다.

TreeSet<String> trev = new TreeSet<String>(Collections.reverseOrder()); 
trev.addAll(ts); 
//now you can just iterate which the usual forward iterator. 
Iterator i = trev.iterator(); 
while(i.hasNext()) { 
    String next = i.next(); 
}