java 数据去重

数据去重除了对list循环之外一般会借助Set不包含重复数据特性来达到去重目的。
1、HashSet & LinkedHashSet
重写对象的hashCode和equals,优先判断hashCode返回值是否一样,一样再判断equals。HashSet无序(基于哈希表实现),LinkedHashSet有序(数据添加时的顺序),LinkedHash继承HashSet,均为非同步集合

2、TreeSet
数据实现Comparable接口,根据compareTo返回值判断数据是否重复,基于红黑树实现,有序(使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法),非同步集合,比较有用的api如下:
higher(E e)
返回此 set 中严格大于给定元素的最小元素;如果不存在这样的元素,则返回 null。
lower(E e)
返回此 set 中严格小于给定元素的最大元素;如果不存在这样的元素,则返回 null。
floor(E e)
返回此 set 中小于等于给定元素的最大元素;如果不存在这样的元素,则返回 null。
E ceiling(E e)
返回此 set 中大于等于给定元素的最小元素;如果不存在这样的元素,则返回 null。
去重写法一般如下,contactSet.addAll之后的集合即为无重复数据集合,去重是以ContactInfoBean对象的getPhone返回值作为去重依据:
Set contactSet = new TreeSet<>(Comparator.comparing(ContactInfoBean::getPhone));
contactSet.addAll(contactItems);

3、Java8新特性stream进行去重
用steam的distinct()方法返回一个由不同数据组成的流,通过对象的equals()方法进行比较。
List data = new ArrayList();
List listWithoutDuplicates = data.stream().distinct().collect(Collectors.toList());

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值