List去重

399 篇文章 12 订阅

相信大家在很多需求中遇到过这个问题,就是去除list集合中的重复值,大部分是采用一下几种方法:

1、最简单直接的方式

循环嵌套去重复数据

// 第一种去重复方法
public void Test1() {
	List<String> list = new ArrayList<String>();
	list.add("1");
	list.add("2");
	list.add("3");
	list.add("4");
	list.add("4");
	list.add("3");
	list.add("2");
	list.add("1");
	System.out.println("去重复元素之前:");
	for (String s : list) {
		System.out.println(s);
	}
	// 遍历ArrayList
	for (int i = 0; i < list.size() - 1; i++) {
		for (int j = i + 1; j < list.size(); j++) {
			if (list.get(i).equals(list.get(j))) {
				list.remove(j);
			}
		}
	}
	System.out.println(list.size());
	System.out.println("去重复元素之后:");
	for (String s : list) {
		System.out.println(s);
	}
}

2、判断赋值给新的List

//遍历后判断赋给另一个list集合
public static void main(String[] args) {
    List<String> list  =   new  ArrayList<String>();
    list.add("aaa");
    list.add("bbb");
    list.add("aaa");
    list.add("aba");
    list.add("aaa");
    List<String> newList = new  ArrayList<String>();
    for (String cd : list) {
        if(!newList.contains(cd)) {
            newList.add(cd);
        }
    }
    System.out.println( "去重后的集合: " + newList);
}

3、用赋给set集合再返回给list集合

set集合是无需不重复的

//set集合去重,不打乱顺序
public static void main(String[] args) {
    List<String> list  =   new  ArrayList<String>();
    list.add("aaa");
    list.add("bbb");
    list.add("aaa");
    list.add("aba");
    list.add("aaa");
    Set set = new  HashSet();
    List newList = new  ArrayList();
    for (String cd : list) {
        if(set.add(cd)) {
            newList.add(cd);
        }
    }
    System.out.println( "去重后的集合: " + newList);
}


//set去重 不用循环
public static void main(String[] args) {
    List<String> list  =   new  ArrayList<String>();
    list.add("aaa");
    list.add("bbb");
    list.add("aaa");
    list.add("aba");
    list.add("aaa");
    Set set = new  HashSet();
    List newList = new  ArrayList();
    set.addAll(list);
    newList.addAll(set);
    System.out.println( "去重后的集合: " + newList);
}

4、使用treeset进行去重并排序

hashset不进行排序,还有一种方法是用treeset,去重并且按照自然顺序排列,将hashset改为treeset就可以了。(原本的顺序是改变的,只是按照字母表顺序排列而已)

//去重并且按照自然顺序排列
List newList = new ArrayList(new TreeSet(list)); 

5、用JDK1.8 Stream中对List进行去重

首先获得此list的Stream.然后调用distinct()方法,java8中提供流的方式对数据进行处理,非常快,底层用的是forkJoin框架,提供了并行处理,使得多个处理器同时处理流中的数据,所以耗时非常短 。

list.stream().distinct();

 

参考:https://blog.csdn.net/tangyaya8/article/details/80640893

           https://blog.csdn.net/weixin_42386685/article/details/80927540

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值