как удалить последний элемент в java.util.Set? - PullRequest
5 голосов
/ 07 января 2012

Я хочу удалить каждый последний элемент этого набора.

        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.

Ответы [ 5 ]

13 голосов
/ 07 января 2012

Вам нужно будет вернуться к TreeSet, так как у Set нет никакого заказа.

listOfSources.remove( ((TreeSet) listOfSources).last() );
5 голосов
/ 07 января 2012

В качестве альтернативы вы можете установить listOfSources как SortedSet

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

Затем вы можете использовать last() метод без приведения к TreeSet

listOfSources.remove(listOfSources.last());

Я думаю, что это предпочтительныйподход, так как вы предполагаете, что ваш набор имеет заказ.

3 голосов
/ 11 сентября 2015

Для TreeSet вы можете использовать функцию pollLast.

listOfSources.pollLast();

См .: http://docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html#pollLast()

1 голос
/ 05 апреля 2019

Наиболее эффективным является использование NavigableSet pollLast метода.

Для лучшей практики вы должны объявить вашу переменную как NavigableSet вместо Set.

Это лучше, чем приведение вашей переменной к TreeSet по нескольким причинам:

  • вы должны оставить выбор реализации только в одном месте.Если вы приведете к TreeSet, как было рекомендовано в других ответах, и позже измените выбранную реализацию в том месте, где вы определяете свою переменную, но забудете изменить ее ниже, она выдаст исключение
  • , по существу,Тот факт, что ваша логика требует от вас удаления последнего элемента, означает, что поведение, которое вы ожидаете от своей переменной, соответствует NavigableSet, а не просто Set.Таким образом, выбор типа этой переменной должен сделать это явным.
1 голос
/ 07 января 2012

Другая возможность - использовать класс Stack. (Хотя и менее эффективный для рассматриваемой проблемы)

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

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

pop() метод получит последний элемент и удалит его из стека.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...