在日常开发中我们往往会遇到这样的需求,就是有两个List需要我们去重并合并,那么我们来研究一下基础类型List的这种操作应该如何实现。有很多种方法我们来研究一下。
比如说我们要处理如下两个列表的合并
List listA = new ArrayList();
listA.add("a");
listA.add("b");
listA.add("c");
listA.add("d");
List listB = new ArrayList();
listB.add("a");
listB.add("f");
listB.add("g");
listB.add("i");
1. 第一种方式使用List的基本api来操作
public static void sortListTwo(List listA, List listB) {
listA.removeAll(listB);
listA.addAll(listB);
for (String str : listA) {
System.out.println(str);
}
}
这种方式我感觉适合小体量的数据操作,如果数据量太大性能很低,感觉底层是底层遍历实现,所以大体量数据不推荐试着用这种方式。
2. 第二种方式就是使用set的方式实现,set本身就不能存在重复的数据
public static void sortListOne(List listA, List listB) {
Set set = new HashSet();
set.addAll(listA);
set.addAll(listB);
List listC = new ArrayList(set);
}
3. 第三种方式是使用Map方式进行key唯一去重
public static void sortListFree(List listA, List listB) {
Map map = new HashMap();
for (String str : listA) {
map.put(str, str);
}
for (String str : listB) {
map.put(str, str);
}
}
如果我自己使用的话我偏向于第二种和第三种方式,如果第一种方式不太理解的话可以自己写个例子试试就明白了。