最简单的方式是重写list对象去重的hashCode囷equals方法这两个方法都是你的那个重复字段计算出来的。
然后用HashSet就可以直接去重
那么就需要循环遍历了,虽然慢但是如果不是大量数據和大量并发是没关系的。
相信大家在很多需求中遇到過这个问题,将一个List中去除,只保留一份,通常有以下几种办法
我设定一个用例List,里面有10亿数据,都是1,用以下几种方式进行去重,通过计算时间差来对仳,当然,计算的方式和比较的方式可能不专业,有疑问大家可以指出来
我们直接初始化好list的长度,减少对测试的影响
此种方式是利用了Set的特性:元素不可重复,其底层原理是通过先计算每个list对象去重的hash值,再比較元素值是否相同,如果相同,则保留最新的.
两层循环,外层循环从第一个元素想最后一个元素循環,
内层循环是从最后一个元素向外层循环元素的当前元素循环
比较两个元素是否相等,如果相等,移除靠后的元素来进行去重
这种方法时间复雜度大于O(n),小于O(N?)
首先获得此list的Stream.然后调用distinct()方法,java8中提供流的方式对数据进行处理,非常快,底层用的是forkJoin框架,提供了并行处理,使得多個处理器同时处理流中的数据,所以耗时非常短
测试可能不充分,但是,通过用例我们可以清楚的看到,在空间复杂度相同的情况下,用流的方式最快,大家可以在适合的场景选取流的方式对数据进行处理.
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。