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

또 다른 가능성은 스택 클래스를 사용하는 것입니다.

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

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

pop() (문제의 문제에 대한 덜 효율적이지만) 방법은 마지막 요소를 얻을 스택에서 제거됩니다.

+0

이 방법은 콜렉션의 얕은 복사본을 만든 다음 정렬 할 때 효율적이지 않으며 정렬 된 구조가 이미 있으므로 제대로 액세스해야합니다. –

+0

다른 사용자가 유사한 문제가있는 참조 용입니다. 아마도 스택은 다른 경우에 옵션이 될 수 있습니다. 이 방법은 실제로 효율성이 떨어집니다. –

관련 문제