目次
序文
多くの場合、リスト内のデータの重複を排除する必要があります。以下では、リスト内の重複データを削除する5つの方法を紹介します。
1. LinkedHashSetを使用して、arraylist内の重複データを削除します
LinkedHashSetは、ArrayList内の重複データを削除するための最良の方法です。LinkedHashSetは、内部で2つのことを実行します。
1.重複データを削除します
2.追加されたデータの順序を維持します
LinkedHashSetを使用して、配列リスト内の重複を削除します。与えられた例では、numbersListは整数を含む配列リストであり、その一部は繰り返される数値です。
たとえば、1、3、5です。リストをLinkedHashSetに追加してから、コンテンツをリストに返します。結果のarraylistには、繰り返される整数はありません。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedHashSet;
public class ArrayListExample
{
public static void main(String[] args)
{
ArrayList<Integer> numbersList = new ArrayList<>(Arrays.asList(1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8));
System.out.println(numbersList);
LinkedHashSet<Integer> hashSet = new LinkedHashSet<>(numbersList);
ArrayList<Integer> listWithoutDuplicates = new ArrayList<>(hashSet);
System.out.println(listWithoutDuplicates);
}
}
出力結果
[1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
2.リストの重複排除にjava8の新機能ストリームを使用します
配列リストから重複を削除するには、java8ストリームAPIを使用することもできます。Steamのdistinct()メソッドを使用して、異なるデータで構成されるストリームを返します。これは、オブジェクトのequals()メソッドによって比較されます。
Collectors.toList()を使用して、すべてのエリアデータリストを収集します。
Setを使用せずにJavaの配列リストから重複アイテムを削除するために使用されます。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class ArrayListExample
{
public static void main(String[] args)
{
ArrayList<Integer> numbersList = new ArrayList<>(Arrays.asList(1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8));
System.out.println(numbersList);
List<Integer> listWithoutDuplicates = numbersList.stream().distinct().collect(Collectors.toList());
System.out.println(listWithoutDuplicates);
}
}
出力結果
[1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8]
[1, 2, 3, 4, 5, 6, 7, 8]
3.利用HashSet
重複データを追加できないHashSetの機能を使用してください。HashSetは追加の順序を保証できないため、順序を保証するための判断条件としてのみ使用できます。
private static void removeDuplicate(List<String> list) {
HashSet<String> set = new HashSet<String>(list.size());
List<String> result = new ArrayList<String>(list.size());
for (String str : list) {
if (set.add(str)) {
result.add(str);
}
}
list.clear();
list.addAll(result);
}
4.Listのcontainsメソッドを使用します
Listのcontainsメソッドを使用して、重複を避けるために、データを1回だけループ、並べ替え、追加します。
private static void removeDuplicate(List<String> list) {
List<String> result = new ArrayList<String>(list.size());
for (String str : list) {
if (!result.contains(str)) {
result.add(str);
}
}
list.clear();
list.addAll(result);
}
5.重複を削除するためにforループを2倍にする
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < list.size(); j++) {
if(i!=j&&list.get(i)==list.get(j)) {
list.remove(list.get(j));
}
}