Remove duplicate items from a list

I developed a list of arrays.

ArrayList<String> list = new ArrayList<String>();

list.add("1");
list.add("2");
list.add("3");
list.add("3");
list.add("5");
list.add("6");
list.add("7");
list.add("7");
list.add("1");
list.add("10");
list.add("2");
list.add("12");

But, as seen above, it contains many repeating elements. I want to remove all duplicates from this list. For this, I think I need to convert the list to a set first.

Does Java provide the functionality of converting a list to a set? Are there other options for removing duplicates from a list?

+5
source share
8 answers

You can convert to Set with:

Set<String> aSet = new HashSet<String>(list);

Or you can convert to a set and return to the list with:

list = new ArrayList<String>(new HashSet<String>(list));

However, both of these parameters cannot preserve the order of the elements. To maintain order, you can use HashSetas an auxiliary structure when repeating:

List<String> list2 = new ArrayList<String>();
HashSet<String> lookup = new HashSet<String>();
for (String item : list) {
    if (lookup.add(item)) {
        // Set.add returns false if item is already in the set
        list2.add(item);
    }
}
list = list2;

. , . , , , .

+24

:

Set<String> set = new HashSet<String>();
set.addAll(list);
list.clear();
list.addAll(set);
+9

Java 8: list.stream().distinct().collect(Collectors.toList());

:)

+5

, LinkedHashSet HashSet

Set<String> mySet = new LinkedHashSet<String>(list);
+3

:

ArrayList<T> yourList;
HashSet<T> set = new HashSet<T>(yourList);

, , . , . , , ( , , ).

+1

:

 Set<String> set = new TreeSet<String>(list);
0
package com.scjp.dump.test;

import java.util.ArrayList;

import java.util.Iterator;

import java.util.List;

public class ArrayListTest {

    public static void main(String[] args) {

        List<Integer> mylist2 = new ArrayList<Integer>();

        List<Integer> mylist1 = new ArrayList<Integer>();
        mylist1.add(3);
        mylist1.add(3);
        mylist1.add(5);
        mylist1.add(9);
        mylist1.add(2);
        mylist1.add(5);
        mylist1.add(5);
        mylist1.add(3);
        mylist1.add(3);
        mylist1.add(3);
        mylist1.add(9);
        mylist1.add(56);
        System.out.println(mylist1);
        Iterator<Integer> itr1 = mylist1.listIterator();
        while (itr1.hasNext()) {
            Integer itn1 = (Integer) itr1.next();
            if (mylist2.contains(itn1) == false)
                mylist2.add(itn1);
        }

        System.out.println(mylist2);

    }

}
0

.

Java 8:

List<String> distinctLambda=originalList.stream()
           .distinct().collect(Collectors.toList());
 System.out.println(distinctLambda);

Set:

Set<String> distinctSet=new HashSet<>(originalList);
        System.out.println(distinctSet);

:

List<String> distinctNewList=new ArrayList<>();
        for (String temp:originalList) {
            if(distinctNewList.size()==0){
                distinctNewList.add(temp);
                continue;
            }

            if(!distinctNewList.contains(temp)){
                distinctNewList.add(temp);
            }
        }

        System.out.println(distinctNewList);

:

ArrayList<String> originalList = new ArrayList<>();
        originalList.add("1");
        originalList.add("2");
        originalList.add("3");
        originalList.add("3");
        originalList.add("5");
        originalList.add("6");
        originalList.add("7");
        originalList.add("7");
        originalList.add("1");
        originalList.add("10");
        originalList.add("2");
        originalList.add("12");
0

All Articles