List去重方法

List去重方法详解

在Java编程中,经常需要对列表(List)进行去重操作,保证列表中的每个元素都是唯一的。本文将介绍5种常见的List去重方法,并提供相应的代码示例。

对以下列表去重:

 List<String> nameList = Arrays.asList(
            "百里",
            "李四",
            "王五",
            "百里",
            "张三",
            "王五",
            "李四",
            "赵六"
    );

1. 单层for循环去重

单层for循环去重是一种简单直接的方法,通过遍历原始列表,将不重复的元素添加到一个新的列表中。

@Test
public void test01() {
    List<String> strings = new ArrayList<>(nameList);
    List<String> dpNameList = new ArrayList<>();
    for (String s : strings) {
        if (!dpNameList.contains(s)) {
            dpNameList.add(s);
        }
    }
    System.out.println(dpNameList);
}

优点:逻辑简单易懂。
缺点:时间复杂度较高,为O(n²),适用于元素较少的情况。

2. 双重for循环去重

双重for循环去重通过两层循环,比较每个元素,移除重复的元素。

@Test
public void test02() {
    List<String> strings = new ArrayList<>(nameList);
    for (int i = 0; i < strings.size() - 1; i++) {
        for (int j = strings.size() - 1; j > i; j--) {
            if (strings.get(i).equals(strings.get(j))) {
                strings.remove(j);
            }
        }
    }
    System.out.println(strings);
}

优点:直接处理原列表。
缺点:时间复杂度为O(n²),性能不高。

3. 单层for循环,利用元素坐标去重处理

这种方法通过单层for循环和元素的索引来去重。

@Test
public void test03() {
    List<String> strings = new ArrayList<>(nameList);
    List<String> strings2 = new ArrayList<>(nameList);
    for (String s : strings2) {
        if (strings.indexOf(s) != strings.lastIndexOf(s)) {
            strings.remove(strings.lastIndexOf(s));
        }
    }
    System.out.println(strings);
}

优点:使用索引定位元素,代码简洁。
缺点:时间复杂度仍然较高,适用于小规模数据。

4. 使用Set去重

Set是一种不允许重复元素的数据结构,可以利用它的特性进行去重。

@Test
public void test04() {
    List<String> strings = new ArrayList<>(new HashSet<>(nameList));//不能保证元素有序
    List<String> strings1 = new ArrayList<>(new LinkedHashSet<>(nameList));//保证元素有序
    System.out.println(strings);
    System.out.println(strings1);
}

优点:利用Set的特性,去重效率高。
缺点:HashSet不保证元素顺序,需要使用LinkedHashSet来保证顺序。

5. 使用Stream流去重

Java 8引入了Stream API,可以方便地进行去重操作。

@Test
public void test05() {
    List<String> strings = new ArrayList<>(nameList);//不能保证元素有序
    strings = strings.stream().distinct().collect(Collectors.toList());
    System.out.println(strings);
}

优点:代码简洁,利用Stream API,性能较好。
缺点:需要Java 8或以上版本支持。

总结

以上介绍了5种List去重方法,每种方法都有其适用场景。对于小规模数据,可以选择单层或双层for循环去重;对于需要保持元素顺序的情况,可以选择使用LinkedHashSet;对于大规模数据,推荐使用Stream API进行去重。根据具体需求选择合适的方法,可以有效提升代码性能和可读性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值