2009-05-29 2 views
0

Как я могу легко удалить дубликаты в связанном списке в java?Как я могу удалить дубликаты в связанном списке в java?

+0

Я пропустил некоторые детали, извините, структура данных должна быть дубликатом свободной, отсортированной и способной иметь итератор. –

+1

A SortedSet, как TreeSet, сделает все это. –

+0

@Peter Lawrey - Спасибо, за комментарий, я обнаружил структуру данных TreeSet пару дней назад, и это именно то, что мне нужно. –

ответ

9

Я не знаю, если ваши требования, чтобы использовать связанный список, но если нет, то использовать Set вместо List (вы помечено вопрос, как «передовой опыт»)

+0

В итоге я использовал TreeSet вместо простого набора, но это был ваш ответ, который заставил меня прийти к такому выводу, спасибо снова. –

3

Легко с точки зрения чего? Если это достаточно короткий список, самым простым решением является сброс его в Set, а затем обратно в список.

myList = new LinkedList<Whatever>(new HashSet<Whatever>(myList)); 

Но зачем это беспокоиться? Если вы не хотите дублировать, вы должны использовать Set; если вам нужен только список, чтобы вы могли сохранить элементы в том же порядке, в который они были вставлены, вы можете использовать LinkedHashSet, чтобы получить лучшее из обоих миров: Set, который итерационно прогнозирует как LinkedList.

+0

Я согласен с тем, что вы не должны использовать Список, если требуется набор. Еще одна деталь вашего кода: myList = новый LinkedList (новый HashSet (myList)); (Так как Set - это интерфейс). Извините за nitpicking ^^ – rodion

16

Вместо этого используйте LinkedHashSet, а затем у вас не будет дубликатов в первую очередь.

+0

Ооо, это тоже хорошо. –

+0

Это точный ответ :) Я использовал их все время, прежде чем они существовали в API, RockedHasSets rock. –

+1

Я продолжаю смотреть на эту опечатку, думая, что за ней стоит кошка. «У ссылок есть наборы?» –

2

Поиск через них и, если два представляют одно и то же, удалите один из них.

Что еще вы хотите? Вы хотите получить советы о том, как это сделать быстро? Если это так, храните узлы в хеш-таблице для удобного поиска при поиске дубликатов.

1
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); 
     } 
    } 
}