关于大量数据去重的基本算法思路

经常在项目中遇到需要将重复元素去掉的问题比如有以下几个典型的场景


1.对于百万级或者千万级数据要求去重保留第一个元素

2.对于百万级或者千万级数据要求去重保留第最后一元素


在项目中大家写了各种算法,我觉得大家写的都挺好的,但是其实只要利用好java API中的集合类

这种问题有很高效的解决方式,就是利用集合Set元素不允许重合这一特性直接使用就行

一下我就string 元素,以及对象元素简单写了一下,可以表述基本思路,当然实际项目中使用比这复杂得多


1.核心类

package com.gqp;


import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;


public class UniqueItem {

/**
* 将一个数组中所有重复的元素去掉,保留第一个
*/
public static List<String> uniqueItemKeepFirst(List<String> origin){

//利用set数据的key特性去除重复保留第一个数据,值为1
Set<String> compSet = new HashSet<String>();

//定义返回唯一的去重了数组
List<String> resultList = new ArrayList<String>();

for (String item : origin) {

//添加新元素
if (!compSet.contains(item)) {
compSet.add(item);
resultList.add(item);
}

}

return resultList;

}

/**
* 将一个数组中所有重复的元素去掉,保留最后一个
*/
public static List<String> uniqueItemKeepLast(List<String> origin){

//利用set数据的key特性去除重复保留第一个数据,值为1
Set<String> compSet = new HashSet<String>();

//定义返回唯一的去重了数组
List<String> resultList = new ArrayList<String>();

for (String item : origin) {

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值