Javaのリンクリスト内の重複を簡単に削除するにはどうすればよいですか?
6 に答える
代わりにLinkedHashSetを使用すると、そもそも重複が発生しなくなります。
リンクリストを使用する必要があるかどうかはわかりませんが、使用しない場合は、リストの代わりにセットを使用してください(質問に「ベストプラクティス」のタグを付けました)
簡単に何の面で?それが適度に短いリストである場合、最も簡単な解決策は、それをセットにダンプしてからリストに戻すことです。
myList = new LinkedList<Whatever>(new HashSet<Whatever>(myList));
しかし、なぜこれを気にするのですか?重複したくない場合は、Set
;を使用する必要があります。挿入されたのと同じ順序で要素を保持できるようにリストのみが必要な場合は、aを使用しLinkedHashSet
て、両方の世界を最大限に活用できますSet
。aは、のように予測どおりに繰り返されLinkedList
ます。
それらを検索し、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);
}
}
}
distinct()
Streamの方法を使用できます。このdistinct()
メソッドはStreamに基づいて機能し、一意の要素のみを含むストリームを返します。このメソッドは、メソッドを内部的に呼び出しますequals()
。
duplicateElements.stream().distinct().collect(Collectors.toList());