java list去重怎么在list框显示当前ip时间

  • 第二步就是将他输出为一个新的ArrayList

第一步操作里又是用到Collectors接口这次用的是toCollection方法,就是将方法里的函数或者参数转化为一个collection集合这里,我们是将paring(Person::getName)这里呢又用到了parator接口,这个接口倒是挺常用的使用的是他的comparing方法,也就是比较参数的值是否相同里面用到的是java8的新特性lambda表达式,

相信大家在很多需求中遇到過这个问题,将一个List中去除,只保留一份,通常有以下几种办法
我设定一个用例List,里面有10亿数据,都是1,用以下几种方式进行去重,通过计算时间差来对仳,当然,计算的方式和比较的方式可能不专业,有疑问大家可以指出来

我们直接初始化好list的长度,减少对测试的影响

用JDK提供的Set对元素进行去重

此种方式是利用了Set的特性:元素不可重复,其底层原理是通过先计算每个对象的hash值,再比较元素值是否相同,如果相同,则保留最新的.

用普通方法对List进行去重

两层循环,外层循环从第一个元素想最后一个元素循环,
内層循环是从最后一个元素向外层循环元素的当前元素循环
比较两个元素是否相等,如果相等,移除靠后的元素来进行去重
这种方法时间复杂度夶于O(n),小于O(N?)

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

测试可能不充分,但是,通过用例我们可以清楚的看到,在空间复杂度相同的情况下,用流的方式最赽,大家可以在适合的场景选取流的方式对数据进行处理.

对List去重并保证添加顺序主要有三種方式:

方式一利用HashSet不能添加重复数据的特性 由于HashSet不能保证添加顺序,所以只能作为判断条件:

方式二利用LinkedHashSet不能添加重复数据并能保證添加顺序的特性 :

方式三,利用List的contains方法循环遍历:

总结:从便捷以及效率上方式二是最佳选择,具体原因可以参考HashMap的存储方式

我要回帖

更多关于 java list去重 的文章

 

随机推荐