java List 去除重复元素的五种方式 学习笔记

java List 去除重复元素的五种方式

集合

		List<String> list = new ArrayList<>();
        list.add("33");
        list.add("33");
        list.add("66");
        list.add("33");
        list.add("11");
        list.add("66");
        list.add("66");
        list.add("88");
        list.add("88");

1.双重for i 循环 使用 remove 方法删除掉重复的元素

		// 这里内层循环是从后面往前面删除,所以不用里面不用 j-- 操作
		for(int i = 0; i < list.size()-1; i++) {
            for( int j = list.size()-1; j > i;j--)  {
                if(list.get(j).equals(list.get(i)))  {
                    list.remove(j);
                }
            }
        }
        System.out.println(list);

		// 这里内层循环是从前往后删除,由于remove方法涉及到内存移动,
		// 在删除一个元素后后面一个元素的下标会往前移,所以这里需要 j-- 将取值也前移一位
		for (int i = 0; i < list.size(); i++) {
            for (int j = i + 1; j < list.size(); j++) {
                if (list.get(i) == list.get(j)) {
                    list.remove(j);
                    j--;
                }
            }
        }
        System.out.println(list);

2.使用HashSet 去除重复,但该方法不能保证集合元素原本的顺序

		Set h = new HashSet(list);
        list.clear();
        list.addAll(h);
        System.out.println(list);

3.使用HashSet来判断元素是否重复,然后将不重复的元素添加到List中

		Set<String> s = new HashSet<>();
        List<String> l = new ArrayList<>();
        for (String str : list) {
            if (s.add(str)) {
                l.add(str);
            }
        }
        list.clear();
        list.addAll(l);
        System.out.println(list);

4.使用contains方法来判断元素是否重复,然后将不重复的元素添加到List中

		List<String> l = new ArrayList<>();
        for (String str : list) {
            if (!l.contains(str)) {
                l.add(str);
            }
        }
        list.clear();
        list.addAll(l);
        System.out.println(list);

5.Java8中 list.stream().distinct() 去除重复元素

补充一下,今天在项目中用这种方法的时候在 list.clear(); 的位置报错
java.lang.UnsupportedOperationException
百度了一下,都是说 Arrays 的 ArrayList 不支持 clear() 和 addAll() 方法导致的,
我没有去深究我这里是为啥报错了的,大佬们有兴趣的话可以评论下。
我项目里面,直接用 streamList 这个 List 了,效果一样
这里做个笔记记录下

		List<String> streamList = list.stream().distinct().collect(Collectors.toList());
        list.clear();
        list.addAll(streamList );
        System.out.println(list);
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值