what is fastest removing deplicates from ArrayList in Java?

what is fastest removing deplicates from ArrayList in Java?

·

2 min read

The Best Winner

private static ArrayList<String> rmDupliArrayList(ArrayList<String> input) {
        ArrayList<String> resultList = new ArrayList<String>();
        for (String temp : input) {
            if (!resultList.contains(temp)) {
                resultList.add(temp);
            }
        }
        return resultList;
}

Seven Ways of Remove Duplicates from ArrayList in Java

1. Logic 1

import java.util.ArrayList;
private static ArrayList<String> rmDupliArrayList(ArrayList<String> input) {
        ArrayList<String> resultList = new ArrayList<String>();
        for (String temp : input) {
            if (!resultList.contains(temp)) {
                resultList.add(temp);
            }
        }

        return resultList;
}

2. HashSet

import java.util.ArrayList;
import java.util.HashSet;
private static ArrayList<String> rmDupliArrayList(ArrayList<String> input) {
        return new ArrayList<String>( new HashSet<String>(input));
}

3. TreeSet

import java.util.ArrayList;
import java.util.TreeSet;
private static ArrayList<String> rmDupliArrayList(ArrayList<String> input) {
        return new ArrayList<String>(new TreeSet<String>(input));
}

4. guava

google guava github link

import java.util.ArrayList;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
private static ArrayList<String> rmDupliArrayList(ArrayList<String> input) {
        return Lists.newArrayList(Sets.newHashSet(input));
}

5. stream

import java.util.ArrayList;
import java.util.stream.Collectors;
private static ArrayList<String> rmDupliArrayList(ArrayList<String> input) {
        return (ArrayList<String>) input
                .parallelStream()
                .distinct()
                .collect(Collectors.toList());
}

6. LinkedHashSet

import java.util.ArrayList;
import java.util.LinkedHashSet;
private static ArrayList<String> rmDupliArrayList(ArrayList<String> input) {
        return new ArrayList<String>(new LinkedHashSet<String>(input));
}

7. Logic 2

import java.util.ArrayList;
private static ArrayList<String> rmDupliArrayList(ArrayList<String> input) {
        ArrayList<String> resultList = new ArrayList<String>(input);

        for (int i = 0; i < resultList.size(); i++) {
            for (int j = i+1; j < resultList.size(); j++) {
                if (resultList.get(j).equals(resultList.get(i))) {
                    resultList.remove(i);
                }
            }
        }
        return resultList;
}

How to compare

public class Main {
    public static void main(String[] args) {
        ArrayList<String> dataList = new ArrayList<String>();
        ArrayList<String> resultList = new ArrayList<String>();
        dataList.add("1111");
        dataList.add("2222");
        dataList.add("3333");
        dataList.add("3333");
        dataList.add("aaaa");
        dataList.add("bbbb");
        dataList.add("eeee");
        dataList.add("bbbb");
        dataList.add("Hi");
        dataList.add("Hi?");
        dataList.add("Hi");
        dataList.add("This is not code");

        int x = 0;
        while (x < 10000) {
            long starttime = System.nanoTime();

            resultList = rmDupliArrayList(dataList);

            long endtime = System.nanoTime();
            long estimatedTime = endtime - starttime;
            System.out.println(estimatedTime);
            ++x;
        }
        System.out.println(resultList);
    }

loop 10,000 times and calculate the average.

Result

Conclusion

Only compare removing duplicates. Logic is best. However, if you need sort, there may other better ways.

Addition

2017

2022

I have tested this 5years ago and I notice that computer speed is much faster. 5 years ago, I tested 1,000 times instead of 10,000

Did you find this article valuable?

Support Eunhan's blog by becoming a sponsor. Any amount is appreciated!