List去重的五种方法。
方案一、LinkedHashSet是在一个ArrayList删除重复数据的最佳方法,删除重复数据同时保持添加到其中的数据的顺序。
1import java.util.ArrayList; 2import java.util.Arrays; 3import java.util.LinkedHashSet; 4 5public class ArrayListExample { 6 7 public static void main(String[] args) { 8 ArrayList<Integer> numList = new ArrayList<>(Arrays.asList(1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8)); 9 System.out.println(numList); 10 11 LinkedHashSet<Integer> hashSet = new LinkedHashSet<>(numList); 12 ArrayList<Integer> listWithoutDuplicates = new ArrayList<>(hashSet); 13 System.out.println(listWithoutDuplicates); 14 } 15 16}
输出结果:
1[1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8] 2[1, 2, 3, 4, 5, 6, 7, 8]
方法二、利用HashSet不能添加重复数据的特性。由于HashSet不能保证添加顺序,所以只能作为判断条件保证顺序。
1import java.util.ArrayList; 2import java.util.Arrays; 3import java.util.HashSet; 4import java.util.List; 5 6public class ArrayListExample { 7 8 public static void main(String[] args) { 9 List<String> list = Arrays.asList("Tom", "LiNa", "May", "Bill", "Admin", "Tom", "Root", "May"); 10 System.out.println(list); 11 12 HashSet<String> set = new HashSet(list.size()); 13 List<String> result = new ArrayList(list.size()); 14 for (String str : list) { 15 if (set.add(str)) { 16 result.add(str); 17 } 18 } 19 System.out.println(result); 20 } 21 22}
输出结果:
1[Tom, LiNa, May, Bill, Admin, Tom, Root, May] 2[Tom, LiNa, May, Bill, Admin, Root]
方案三、利用List的contains方法循环遍历,重新排序,只添加一次数据,避免重复。
1import java.util.ArrayList; 2import java.util.Arrays; 3import java.util.List; 4 5public class ArrayListExample { 6 7 public static void main(String[] args) { 8 List<String> list = Arrays.asList("Tom", "LiNa", "May", "Bill", "Admin", "Tom", "Root", "May"); 9 System.out.println(list); 10 11 List<String> result = new ArrayList(list.size()); 12 for (String str : list) { 13 if (!result.contains(str)) { 14 result.add(str); 15 } 16 } 17 System.out.println(result); 18 } 19 20}
输出结果:
1[Tom, LiNa, May, Bill, Admin, Tom, Root, May] 2[Tom, LiNa, May, Bill, Admin, Root]
方案四、双重for循环去重,无序的。
1import java.util.ArrayList; 2import java.util.List; 3 4public class ArrayListExample { 5 6 public static void main(String[] args) { 7 List<String> list = new ArrayList<>(5); 8 list.add("Tom"); 9 list.add("LiNa"); 10 list.add("Tom"); 11 list.add("May"); 12 list.add("LiNa"); 13 System.out.println(list); 14 15 for (int i = 0; i < list.size(); i++) { 16 for (int j = 0; j < list.size(); j++) { 17 if (i != j && list.get(i) == list.get(j)) { 18 list.remove(list.get(j)); 19 } 20 } 21 } 22 System.out.println(list); 23 } 24 25}
输出结果:
1[Tom, LiNa, Tom, May, LiNa] 2[Tom, May, LiNa]
方案五、使用java8新特性stream进行List去重。
1import java.util.ArrayList; 2import java.util.Arrays; 3import java.util.List; 4import java.util.stream.Collectors; 5 6public class ArrayListExample { 7 8 public static void main(String[] args) { 9 ArrayList<Integer> numList = new ArrayList<>(Arrays.asList(1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8)); 10 System.out.println(numList); 11 12 List<Integer> listWithoutDuplicates = numList.stream().distinct().collect(Collectors.toList()); 13 System.out.println(listWithoutDuplicates); 14 } 15 16}
输出结果:
1[1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8] 2[1, 2, 3, 4, 5, 6, 7, 8]