2013-01-18 77 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不,我不小心刪除的元素,我刪除元素,以便調用。去年()將獲取我的新的最後一個條目 – Wael

回答

3

看似簡單

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

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

爲Java低於1.6,你可以嘗試

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

是的,這看起來很簡單的方法來做到這一點,但它僅適用於JDK 6不會在JDK 5的工作,我喜歡,雖然我使用JDK 6 – Wael

+0

@Wael這是解決方案,除非你有支持版本早於6有幾種增強java.util中的要求與JDK 5有效的解決方案在6中,使代碼更簡單,更清潔。 –

+0

@PatriciaShanahan好的,謝謝大家。我會隨着這個改變而去。這是可以接受的,因爲我們最近遷移到JDK 6,它是我的錯誤,在Eclipse中我仍然使用jdk 5,它沒有顯示ts.descendingIterator()調用。 – 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(); 
} 
相關問題