测试说明:获取firstArrayList和secondArrayList的交集、差集以及并集。实际测试中firstArrayList数据量190000,secondArrayList数据量170000.效率比较高。此处只列出少量数据。测试代码如下:
importjava.util.Set;
importjava.util.List;
importjava.util.HashSet;
importjava.util.TreeSet;
importjava.util.Iterator;
importjava.util.ArrayList;
importjava.util.LinkedList;
public classgetSet {
public static voidmain(String args[]) {
getList();
}
// 获取两个ArrayList的差集、交集、去重并集(数据量大小不限制)
private static voidgetList() {
List firstArrayList = new ArrayList();
List secondArrayList = new ArrayList();
List defectList = new ArrayList();//差集List
List collectionList = new ArrayList();//交集List
List unionList = new ArrayList();//去重并集List
try{
firstArrayList.add("aaa");
firstArrayList.add("bbb");
firstArrayList.add("ccc");
firstArrayList.add("ddd");
secondArrayList.add("bbb");
secondArrayList.add("ccc");
secondArrayList.add("eee");
// 获取差集
defectList =receiveDefectList(firstArrayList, secondArrayList);
Iterator defectIterator =defectList.iterator();
System.out.println("===================差集===================");
while(defectIterator.hasNext()) {
System.out.println(defectIterator.next());
}
// 获取交集
collectionList =receiveCollectionList(firstArrayList, secondArrayList);
Iterator collectionIterator =collectionList.iterator();
System.out.println("===================交集===================");
while(collectionIterator.hasNext()) {
System.out.println(collectionIterator.next());
}
// 获取去重并集
unionList =receiveUnionList(firstArrayList, secondArrayList);
Iterator unionIterator =unionList.iterator();
System.out.println("===================去重并集===================");
while(unionIterator.hasNext()) {
System.out.println(unionIterator.next());
}
}catch(Exception e) {
e.printStackTrace();
}
}
/**
* @方法描述:获取两个ArrayList的差集
* @param firstArrayList 第一个ArrayList
* @param secondArrayList 第二个ArrayList
* @return resultList 差集ArrayList
*/
public static List receiveDefectList(List firstArrayList, ListsecondArrayList) {
List resultList = new ArrayList();
LinkedList result = new LinkedList(firstArrayList);// 大集合用linkedlist
HashSet othHash = new HashSet(secondArrayList);// 小集合用hashset
Iterator iter = result.iterator();// 采用Iterator迭代器进行数据的操作
while(iter.hasNext()){
if(othHash.contains(iter.next())){
iter.remove();
}
}
resultList = new ArrayList(result);
returnresultList;
}
/**
* @方法描述:获取两个ArrayList的交集
* @param firstArrayList 第一个ArrayList
* @param secondArrayList 第二个ArrayList
* @return resultList 交集ArrayList
*/
public static List receiveCollectionList(List firstArrayList, ListsecondArrayList) {
List resultList = new ArrayList();
LinkedList result = new LinkedList(firstArrayList);// 大集合用linkedlist
HashSet othHash = new HashSet(secondArrayList);// 小集合用hashset
Iterator iter = result.iterator();// 采用Iterator迭代器进行数据的操作
while(iter.hasNext()) {
if(!othHash.contains(iter.next())) {
iter.remove();
}
}
resultList = new ArrayList(result);
returnresultList;
}
/**
* @方法描述:获取两个ArrayList的去重并集
* @param firstArrayList 第一个ArrayList
* @param secondArrayList 第二个ArrayList
* @return resultList 去重并集ArrayList
*/
public static List receiveUnionList(List firstArrayList, ListsecondArrayList) {
List resultList = new ArrayList();
Set firstSet = new TreeSet(firstArrayList);
for(String id : secondArrayList) {
// 当添加不成功的时候 说明firstSet中已经存在该对象
firstSet.add(id);
}
resultList = new ArrayList(dawjidSet);
returnresultList;
}
}
打印结果:
===================差集===================aaa
ddd
===================交集===================bbb
ccc
=================去重并集==================aaa
bbb
ccc
ddd
eee
说明,取差集指的是取firstArrayList中存在但secondArrayList中不存在的数据集
原文:http://www.cnblogs.com/o0shine0o-zp/p/6902392.html