java开发中,常常会使用的到ArrayList,关于ArrayList的去重,某记录一下:
1、使用linkedHashSet进行去重。
自我感觉最好的一种方式: 不仅删除重复数据;还可以保证添加的顺序。
废话不多说,上代码:
public static void main(String[] args) {
ArrayList<Integer> numberList= new ArrayList<Integer>(Arrays.asList(1,1,2,3,3,4,4,4,5,6,6,7,7,8,8,9,9,9));
System.out.println(numberList);
LinkedHashSet hashSet = new LinkedHashSet(numberList);
ArrayList<Integer> list= new ArrayList<>(hashSet);
System.out.println(list);
}
执行结果:
2、使用java8 Stream流。
public static void main(String[] args) {
ArrayList<Integer> numberList= new ArrayList<Integer>(Arrays.asList(1,1,2,3,3,4,4,4,5,6,6,7,7,8,8,9,9,9));
System.out.println(numberList);
List<Integer> list = numberList.stream().distinct().collect(Collectors.toList());
System.out.println(list);
}
执行结果:
3、使用HashSet进行去重。
HashSet不保证数据的顺序。
public static void main(String[] args) {
ArrayList<Integer> list= new ArrayList<Integer>(Arrays.asList(1,1,2,3,3,4,4,4,5,6,6,7,7,8,8,9,9,9));
System.out.println(list);
HashSet<Integer> set = new HashSet<Integer>(list.size());
List<Integer> result = new ArrayList<Integer>(list.size());
for (Integer str : list) {
if (set.add(str)) {
result.add(str);
}
}
list.clear();
list.addAll(result);
System.out.println(list);
}
执行结果:
4、使用api,contains方法。
public static void main(String[] args) {
ArrayList<Integer> list= new ArrayList<Integer>(Arrays.asList(1,1,2,3,3,4,4,4,5,6,6,7,7,8,8,9,9,9));
System.out.println(list);
List<Integer> result = new ArrayList<Integer>(list.size());
for (Integer str : list) {
if (!result.contains(str)) {
result.add(str);
}
}
list.clear();
list.addAll(result);
System.out.println(list);
}
执行结果:
5、双重for循环。
public static void main(String[] args) {
ArrayList<Integer> list= new ArrayList<Integer>(Arrays.asList(1,1,2,3,3,4,4,4,5,6,6,7,7,8,8,9,9,9));
System.out.println(list);
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));
}
}
}
System.out.println(list);
}
执行结果: