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
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