我想删除这个集合的每个最后一个元素。
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中删除最后一个元素。
答案 0 :(得分:13)
你需要回到TreeSet,因为Set没有任何订单。
listOfSources.remove( ((TreeSet) listOfSources).last() );
答案 1 :(得分:5)
作为替代方案,您可以将listOfSources设置为SortedSet
SortedSet<String> listOfSources = new TreeSet<String>();
然后您可以使用last()
方法而无需转换为TreeSet
listOfSources.remove(listOfSources.last());
我认为这是一种首选方法,因为您认为您的Set有订单。
答案 2 :(得分:3)
对于TreeSet,您可以使用pollLast
函数。
listOfSources.pollLast();
请参阅:http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html#pollLast()
答案 3 :(得分:1)
另一种可能性是使用Stack类。 (虽然对问题的效率较低)
Set<String> listOfSources = new TreeSet<String>();
Stack<String> stack = new Stack<String>();
stack.addAll(listOfSources);
...
String lastElement = stack.pop();
pop()
方法将获取最后一个元素并将其从堆栈中删除。
答案 4 :(得分:1)
最有效的方法是使用NavigableSet
的{{1}}方法。
为获得最佳实践,您应将变量声明为pollLast
而不是NavigableSet
。
出于以下几个原因,这比将变量强制转换为Set
更好:
TreeSet
,然后又在定义变量的位置更改了所选的实现,但是忘记在下面进行更改,则会引发异常TreeSet
的行为,而不仅仅是NavigableSet
的行为。因此,选择该变量的类型应使之明确。