最近项目中用到了合并去重的相关需求,于是这边总结了不同的去重方式
这边是深海封装的去重合并方法;
/*
*用途:多序列合并去重
*/
public ArrayList requestEditText(boolean isOrderly, ArrayList<Integer>... args) {
if (args == null || args.length == 0) return new ArrayList<>();
HashSet<Integer> hashSet = new HashSet<>();
if (isOrderly) {
ArrayList<Integer> returnList = new ArrayList<>();
// 有序
for (int j = 0; j < args.length; j++) {
for (int z = 0; z < args[j].size(); z++) {
if (hashSet.add(args[j].get(z)))
returnList.add(args[j].get(z));
}
}
return returnList;
} else {
// 无序
for (int j = 0; j < args.length; j++) {
for (int z = 0; z < args[j].size(); z++) {
hashSet.add(args[j].get(z));
}
}
return new ArrayList<>(hashSet);
}
}
接下来咱们测试一下和Java8后的lambda表达式 去重合并 的 耗时对比
测试代码:
/*
*用途: 关于多序列合并去重的耗时测试
*/
public static void main(String[] args) {
ArrayList<Integer> list1 = new ArrayList<>();
ArrayList<Integer> list2 = new ArrayList<>();
ArrayList<Integer> list3 = new ArrayList<>();
for (int i = 0; i < 10000; i++) {
list1.add(1);
list2.add(2);
list3.add(3);
}
long time = new Date().getTime();
List<Integer> list = new ArrayList<>();
list.addAll(list1);
list.addAll(list2);
list.addAll(list3);
List<Integer> collect = list.stream().distinct().collect(Collectors.toList());
long time1 = new Date().getTime();
System.out.println(time1 - time + " → lambda去重合并时间");
ArrayList arrayList = requestEditText(true, list1, list2, list3);
long time2 = new Date().getTime();
System.out.println(time2 - time1 + " → 有序用时");
long time3 = new Date().getTime();
ArrayList arrayList1 = requestEditText(false, list1, list2, list3);
System.out.println(time3 - time2 + " → 无序用时");
System.out.println("------lambda结果-------");
collect.forEach(x -> System.out.println(x + ""));
System.out.println("------有序结果-------");
arrayList.forEach(System.out::println);
System.out.println("------无序结果-------");
arrayList1.forEach(System.out::println);
}
耗时对比结果:
102 → lambda去重合并时间
5 → 有序用时
0 → 无序用时
------lambda结果-------
1
2
3
------有序结果-------
1
2
3
------无序结果-------
1
2
3