Java的List去重
Posted Harris-H
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java的List去重相关的知识,希望对你有一定的参考价值。
Java的List去重
1.contains()去重
ArrayList 的 contains() 方法的时间复杂度是 O ( n ) O(n) O(n)的。
使用contains 进行判断去重的 时间复杂度是 O ( n 2 ) O(n^2) O(n2)
保证去重后相对顺序不变。
public class ListDistinctExample
public static void main(String[] args)
List<Integer> list = new ArrayList<Integer>()
add(1);
add(3);
add(5);
add(2);
add(1);
add(3);
add(7);
add(2);
;
System.out.println("原集合:" + list);
method(list);
/**
* 自定义去重
* @param list
*/
public static void method(List<Integer> list)
// 新集合
List<Integer> newList = new ArrayList<>(list.size());
list.forEach(i ->
if (!newList.contains(i)) // 如果新集合中不存在则插入
newList.add(i);
);
System.out.println("去重集合:" + newList);
2.迭代器去重
自定义 List 去重,除了上面的新建集合之外,我们也可以使用迭代器循环判断每一项数据,如果当前循环的数据,在集合中存在两份或两份以上,就将当前的元素删除掉,这样循环完之后,也可以得到一个没有重复数据的集合,实现代码如下:
public class ListDistinctExample
public static void main(String[] args)
List<Integer> list = new ArrayList<Integer>()
add(1);
add(3);
add(5);
add(2);
add(1);
add(3);
add(7);
add(2);
;
System.out.println("原集合:" + list);
method_1(list);
/**
* 使用迭代器去重
* @param list
*/
public static void method_1(List<Integer> list)
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext())
// 获取循环的值
Integer item = iterator.next();
// 如果存在两个相同的值
if (list.indexOf(item) != list.lastIndexOf(item))
// 移除最后那个相同的值
iterator.remove();
System.out.println("去重集合:" + list);
使用迭代器去重,不需要开辟新的空间,不保证相对顺序不变。
方法3:HashSet去重(无序)
HashSet 会自动排序。
public static void method_2(List<Integer> list)
HashSet<Integer> set = new HashSet<>(list);
System.out.println("去重集合:" + set);
方法4:LinkedHashSet去重(有序)
既然 HashSet 会自动排序不能满足需求,那就使用 LinkedHashSet,它既能去重又能保证集合的顺序,实现代码如下:
*/
public static void method_3(List<Integer> list)
LinkedHashSet<Integer> set = new LinkedHashSet<>(list);
System.out.println("去重集合:" + set);
方法5:TreeSet去重(无序)
TreeSet也会自动去重
除了以上的 Set 集合之外,我们还可以使用 TreeSet 集合来实现去重功能,实现代码如下:
public static void method_4(List<Integer> list)
TreeSet<Integer> set = new TreeSet<>(list);
System.out.println("去重集合:" + set);
方法6:Stream去重(有序)
Stream 实现去重功能和其他方法不同的是,它不用新创建集合,使用自身接收一个去重的结果就可以了,并且实现代码也很简洁,并且去重后的集合顺序也和原集合的顺序保持一致,是我们最优先考虑的去重方法。
public static void method_5(List<Integer> list)
list = list.stream().distinct().collect(Collectors.toList());
System.out.println("去重集合:" + list);
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BPScvHNZ-1640780666386)(C:\\Users\\HeHao\\AppData\\Roaming\\Typora\\typora-user-images\\image-20211229195711770.png)]
以上是关于Java的List去重的主要内容,如果未能解决你的问题,请参考以下文章