数组去重,你会几种方式?
前言
数据去重是项目中经常出现的应用场景,并且面试中可能也会问到,那么你会几种数组去重方式呢?
学习更多,请点击:https://www.bilibili.com/video/BV13V411n7wJ
https://www.bilibili.com/video/BV1i64y1m7QR
https://www.bilibili.com/video/BV1jK4y1o7QM
https://www.bilibili.com/video/BV1dy4y1W7Db
https://www.bilibili.com/video/BV1Qb4y1D75J
实战
使用额外空间去重

优点:实现简单、并且在循环判断过程中可以增加额外操作
缺点:需要一个额外空间大小的数组,浪费空间,多行代码实现
学习更多,请点击:https://www.bilibili.com/video/BV13V411n7wJ
https://www.bilibili.com/video/BV1i64y1m7QR
https://www.bilibili.com/video/BV1jK4y1o7QM
https://www.bilibili.com/video/BV1dy4y1W7Db
https://www.bilibili.com/video/BV1Qb4y1D75J
Set集合自动去重

Java8一键去重(distinct)

distinct去重注意事项
既然这么好用,那distinct是通过什么去重的呢?如果是引用类型,是通过地址去重还是通过某些字段去重呢?
distinct去重失效示例代码

学习更多,请点击:https://www.bilibili.com/video/BV13V411n7wJ
https://www.bilibili.com/video/BV1i64y1m7QR
https://www.bilibili.com/video/BV1jK4y1o7QM
https://www.bilibili.com/video/BV1dy4y1W7Db
https://www.bilibili.com/video/BV1Qb4y1D75J

结果:使用自定义对象distinct
无法去重,难道distinct
无法作用引用类型吗?但是刚才的String
也是引用类型,但是也可以去重。自定义的对象Employee
和String
有什么区别吗?没错,就是hashcode()
和equals()
方法,String
已经重写了这两个方法,自定义的Employee
没有重写这两个方法。
学习更多,请点击:https://www.bilibili.com/video/BV13V411n7wJ
https://www.bilibili.com/video/BV1i64y1m7QR
https://www.bilibili.com/video/BV1jK4y1o7QM
https://www.bilibili.com/video/BV1dy4y1W7Db
https://www.bilibili.com/video/BV1Qb4y1D75J
注意:只要是涉及
Map
和Set
这种去重的集合,或者Java8的distinct
去重,都是通过hashcode()
和equals
来作为数据去重的依据,所以要注意重写这两个方法


小总结
无论使用Set
集合去重还是使用Java8的新特性stream流的distinct
去重,都是通过hashcode()
和equals()
自定义的策略进行去重。
学习更多,请点击:https://www.bilibili.com/video/BV13V411n7wJ
https://www.bilibili.com/video/BV1i64y1m7QR
https://www.bilibili.com/video/BV1jK4y1o7QM
https://www.bilibili.com/video/BV1dy4y1W7Db
https://www.bilibili.com/video/BV1Qb4y1D75J
作者:唐宋xy
链接:https://juejin.cn/post/6954747083525980168
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。