2012-01-07 65 views
5

我想刪除這個集合的每個最後一個元素。如何刪除java.util.Set中的最後一個元素?

 Set<String> listOfSources = new TreeSet<String>(); 
     for(Route route:listOfRoutes){ 
      Set<Stop> stops = routeStopsService.getStops(route); 
      for(Stop stop:stops) 
       listOfSources.add(stop.getStopName()); 
     } 

這裏我想從listOfSources中刪除最後一個元素。

+1

你的代碼依賴於組有序那麼它是不恰當的變量聲明爲一個集合。對接口進行編碼只有在實現無關緊要時纔有意義 - 在這種情況下,它的確如此,並且如果使用接受的答案並且更改了集合的實現,則代碼將失敗。 – 2012-01-07 19:25:01

回答

13

您將需要退回TreeSet,因爲Set沒有任何順序。

listOfSources.remove(((TreeSet) listOfSources).last()); 
+0

感謝它的工作.. – 2012-01-07 19:22:25

5

正如你可以設置listOfSources爲SortedSet的

SortedSet<String> listOfSources = new TreeSet<String>(); 

然後你可以使用last()方法,無需強制轉換爲TreeSet的

listOfSources.remove(listOfSources.last()); 

我認爲這是一個首選的方法,因爲替代你認爲你的套件有訂單。

1

另一種可能性是使用Stack類。 (雖然有問題的問題,效率較低)

 Set<String> listOfSources = new TreeSet<String>(); 

    Stack<String> stack = new Stack<String>(); 
    stack.addAll(listOfSources); 
    ... 
    String lastElement = stack.pop(); 

pop()方法將獲得最後一個元素,並從堆棧中刪除它。

+0

這會效率較低(因爲您正在創建集合的淺表副本,然後對其進行排序)並且是多餘的 - 因爲已排序的結構已經就位,只需要正確訪問。 – 2012-01-07 19:29:51

+0

這只是供其他用戶參考,有類似的問題。在其他情況下,堆棧可能是一個選項。在這其中,這實際上效率較低。 – 2012-01-07 19:45:21

相關問題