Как я могу легко удалить дубликаты в связанном списке в java?Как я могу удалить дубликаты в связанном списке в java?
ответ
Я не знаю, если ваши требования, чтобы использовать связанный список, но если нет, то использовать Set вместо List (вы помечено вопрос, как «передовой опыт»)
В итоге я использовал TreeSet вместо простого набора, но это был ваш ответ, который заставил меня прийти к такому выводу, спасибо снова. –
Легко с точки зрения чего? Если это достаточно короткий список, самым простым решением является сброс его в Set, а затем обратно в список.
myList = new LinkedList<Whatever>(new HashSet<Whatever>(myList));
Но зачем это беспокоиться? Если вы не хотите дублировать, вы должны использовать Set
; если вам нужен только список, чтобы вы могли сохранить элементы в том же порядке, в который они были вставлены, вы можете использовать LinkedHashSet
, чтобы получить лучшее из обоих миров: Set
, который итерационно прогнозирует как LinkedList
.
Я согласен с тем, что вы не должны использовать Список, если требуется набор. Еще одна деталь вашего кода: myList = новый LinkedList
Вместо этого используйте LinkedHashSet, а затем у вас не будет дубликатов в первую очередь.
Ооо, это тоже хорошо. –
Это точный ответ :) Я использовал их все время, прежде чем они существовали в API, RockedHasSets rock. –
Я продолжаю смотреть на эту опечатку, думая, что за ней стоит кошка. «У ссылок есть наборы?» –
Поиск через них и, если два представляют одно и то же, удалите один из них.
Что еще вы хотите? Вы хотите получить советы о том, как это сделать быстро? Если это так, храните узлы в хеш-таблице для удобного поиска при поиске дубликатов.
import java.util.*;
import java.lang.*;
class Main
{
public static void main (String[] args) throws java.lang.Exception
{
Collection<String> c = new LinkedList<String>();
c.add("JAR");c.add("BDK");c.add("JDK");c.add("JAR");c.add("WAR");c.add("APK");c.add("BDK");
c=new HashSet(c);
c=new ArrayList(c);
for(String s : c)
{
System.out.println(s);
}
}
}
Я пропустил некоторые детали, извините, структура данных должна быть дубликатом свободной, отсортированной и способной иметь итератор. –
A SortedSet, как TreeSet, сделает все это. –
@Peter Lawrey - Спасибо, за комментарий, я обнаружил структуру данных TreeSet пару дней назад, и это именно то, что мне нужно. –