2012-01-07 17 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

IMOを命じ、それがセットとして変数を宣言するのは不適切だ設定に依存しています。インプリメンテーションが重要でない場合(この場合は実装されていれば)、インターフェイスにコーディングするだけで意味があります。受け入れられた回答を使用してセットの実装を変更すると、コードは失敗します。 –

答えて

13

Setの順序がないため、TreeSetにキャストする必要があります。あなたは、あなたが、私はこれが好ましい方法であるためだと思いTreeSetの

listOfSources.remove(listOfSources.last()); 

にキャストせずにlast()メソッドを使用することができたSortedSet

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

としてlistOfSourcesを設定することができます別の方法として

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

ありがとうございます。 –

5

あなたのセットには順序があると仮定します。

1

もう1つの可能性は、Stackクラスを使用することです。 (問題の問題にはあまり効率的ではあるが)

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

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

pop()方法は、最後の要素を取得し、スタックから削除されます。

+0

これは、コレクションの浅いコピーを作成してから並べ替えると、効率が悪くなり、ソートされた構造が既に配置されているため、適切にアクセスする必要があります。 –

+0

これは他のユーザーが同様の問題を抱えていることを示すためのものです。他のケースではスタックがオプションになる可能性があります。これは実際には効率が悪いです。 –

関連する問題