ホームページ  >  記事  >  Java  >  Java配列から重複データを削除する実装方法を詳しく解説

Java配列から重複データを削除する実装方法を詳しく解説

黄舟
黄舟オリジナル
2017-09-08 11:15:462215ブラウズ

この記事では、主に Java で配列から重複データを削除する方法を紹介します。配列から重複を削除するためのいくつかの一般的な方法、実装原理、および関連する注意事項を例の形式で詳細に分析します。この記事では、Java が配列から重複データを削除するメソッドを実装する例について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

少し前にインタビューで質問されました: 配列に重複した要素がある場合、重複を削除するにはどのような方法を使用できますか?しばらくは 1 つの方法を使用することを考えていましたが、後で情報を確認したところ、それを実現するための方法が多数あることがわかりました。ここでは、より簡単な方法をいくつかまとめます。

1. Listコレクションを使用して

int[] str = {5, 6, 6, 6, 8, 8, 7,4};
List<Integer> list = new ArrayList<Integer>();
for (int i=0; i<str.length; i++) {
  if(!list.contains(str[i])) {
    list.add(str[i]);
  }
}
System.out.println("去除重复后的list集合"+list);

を実装します。出力結果は次のようになります。

去除重复后的list集合[5, 6, 8, 7, 4]

重複した要素を削除できることがわかりますが、ソート機能は実装されていません。

2. hashSet または TreeSet を使用して

Integer[] nums = { 5, 5, 6, 6, 6, 8, 8, 7, 11, 12, 12 };
// HashSet hset = new HashSet(Arrays.asList(nums));
TreeSet<Integer> hset = new TreeSet<Integer>(Arrays.asList(nums));
Iterator i = hset.iterator();
while(i.hasNext()){
  System.out.println(i.next());
}

出力結果:

5 6 7 8 11 12

重複データが削除されただけでなく、データが並べ替えられていることがわかります。

そのうちの 1 つは、配列を List オブジェクトに変換することです。このメソッドは ArrayList 型のオブジェクトを返します。この ArrayList クラスは java.util.ArrayList クラスではなく、Arrays クラスの静的な内部クラスです。

TreeSet は、要素の重複を防ぐだけでなく、並べ替えなどの機能を備えたコレクションを実装することもできます。オブジェクト要素がセットに追加されると、特定の比較ルールに従って順序付けられたオブジェクトのシーケンスに自動的に挿入されます。 Arrays.asList()

3. Listを使用して

int[] nums = { 5, 6, 6, 6, 8, 8, 7 };
List<Integer> numList = new ArrayList<Integer>();
for (int i : nums)
  numList.add(i);
Set<Integer> numSet = new HashSet<Integer>();
numSet.addAll(numList);
System.out.println(numSet);

を実装すると、出力結果:

[5, 6, 7, 8]

重複データも削除され、ソートが実装されていることがわかります。

HashSetとTreeSetを比較してみましょう:

HashSet

HashSetには以下の特徴があります

1) 要素の順序は保証されず、順序は変更される可能性があります

2)同期されません

3) コレクション要素は null にすることができますが、null を 1 つだけ入れることができます


要素が HashSet コレクションに格納されると、HashSet はオブジェクトの hashCode() メソッドを呼び出して hashCode 値を取得しますオブジェクトの値を取得し、hashCode 値に従って HashSet 内のオブジェクトの格納場所を決定します。

簡単に言えば、HashSet セット内の 2 つの要素が等しいかどうかを判断する基準は、equals メソッドによって 2 つのオブジェクトが等しいこと、および 2 つのオブジェクトの hashCode() メソッドの戻り値が等しいことです。

オブジェクトを HashSet に配置する場合は、オブジェクトの対応するクラスの equals メソッドをオーバーライドし、その hashCode() メソッドもオーバーライドすることに注意してください。ルールは、2 つのオブジェクトが、equals メソッドの比較を通じて true を返した場合、それらの hashCode も同じである必要があるということです。さらに、オブジェクト内で同等として使用される標準属性を、hashCode の値の計算に使用する必要があります。

TreeSet クラス

TreeSet は、コレクション要素がソートされた状態であることを保証できる、SortedSet インターフェイスの唯一の実装クラスです。 TreeSet は、自然ソートとカスタマイズされたソートという 2 つのソート方法をサポートしています。このうち、自然ソートはデフォルトのソート方法です。 TreeSet に追加されるのは、同じクラスのオブジェクトである必要があります。

TreeSet が 2 つのオブジェクトが等しくないと判断する方法は、2 つのオブジェクトが equals メソッドを通じて false を返すか、CompareTo メソッドによる比較で 0 が返されないことです

自然な並べ替え

自然な並べ替えは CompareTo (オブジェクトobj) ソート対象要素のメソッド 要素間の大小関係を比較し、要素を昇順に並べます。

Java は、compareTo(Object obj) メソッドを定義する Comparable インターフェイスを提供します。このメソッドは、このインターフェイスを実装するオブジェクトのサイズを比較できます。

obj1.compareTo(obj2) メソッドが 0 を返した場合、比較されている 2 つのオブジェクトが等しいことを意味し、正の数を返した場合は、obj1 が obj2 より大きいことを意味します。 obj1 が obj2 より小さいということです。

2つのオブジェクトのequalsメソッドに対して常にtrueを返す場合、2つのオブジェクトのcompareToメソッドの戻り値は0を返すはずです

カスタマイズされた並べ替え

自然な並べ替えはコレクション要素のサイズに基づいています。並べ替えをカスタマイズするには、Comparator インターフェイスを使用し、int Compare(T o1,T o2) メソッドを実装する必要があります。

最も重要な点:

1. TreeSet は 2 差分ツリーによって実装され、Treeset 内のデータは自動的にソートされ、null 値は許可されません。

2. HashSet はハッシュ テーブルによって実装されます。HashSet 内のデータは順序付けされていません。ただし、両方の値を繰り返すことはできません。データベース。

3. HashSet では、挿入されるオブジェクトが HashCode() メソッドを実装する必要があります。同じ内容の String オブジェクトは同じハッシュコードを持つため、挿入される内容を繰り返すことはできません。ただし、同じクラスのオブジェクトを異なるインスタンスに配置することはできます。

以上がJava配列から重複データを削除する実装方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。