经常在项目中遇到需要将重复元素去掉的问题比如有以下几个典型的场景
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) {