Как удалить дубликаты в java LinkedList? - PullRequest
1 голос
/ 19 апреля 2020

Я пытаюсь удалить дубликаты из предварительно созданного отсортированного LinkedList, и мне не разрешено использовать ha sh наборы, наборы, карты, коллекции, узлы, массивы, индексы или т. Д. c, только циклы и I Я немного озадачен. Я возился с моим кодом, но я либо выбросил исключения, либо я удалил все. Любая помощь приветствуется! Это мой текущий код:

private void duplicates() {

    ListIterator<String> it = sorts.listIterator();
    it.next();
    while(it.hasNext()) {

        String last = it.previous();
        String nest = it.next();

        if(last.equals(nest)) {
            it.remove();
        }
    }
}

Ответы [ 3 ]

2 голосов
/ 19 апреля 2020

... из готового отсортированного LinkedList.

Пока вы можете гарантировать, что список действительно отсортирован (не упорядочен, но действительно отсортирован), который Результаты в дублированных элементах находятся рядом друг с другом, вы можете просто сравнить эти 2 соседа и сдвинуть их, если они разные.

только циклы

Если вы имеете в виду скорее "итерации", чем циклы (for-each), то это способ go:

ListIterator<String> it = sortedCounties.listIterator();
String current = it.next();                          // get a first element
while (it.hasNext()) {
    String next = it.next();                         // get another one
    if (current.equals(next)) {                      // if equal
        it.remove();                                 // .. remove the "next" element
    } else {
        current = next;                              // .. or else shift by one
    }
}
0 голосов
/ 19 апреля 2020

Таким образом, основная идея c удаления двойных элементов состоит в том, чтобы выбрать один и сравнить его с остальными элементами, если найдены дубликаты, а затем удалить его.

код sudo:

currentElement = iterator1.next()
while iterator1.hasNext()
   while iterator2.hasNext()
      nextElement = iterator2.next()
      if currentElement == nextElement
         then remove nextElement
      else
         then nextElement = iterator2.next()
   currentElement = iterator1.next()
0 голосов
/ 19 апреля 2020

Вы можете использовать Java 8 Stream API для такой работы

private void unduplicate() {
  sortedCounties = sortedCounties.stream()
        .distinct()
        .collect(Collectors.toCollection(LinkedList::new));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...