java8获取两个list的交集和差集_JAVA获取两个数据量较大的ArrayList的交集、差集以及并集详解...

2023-05-16

测试说明:获取firstArrayList和secondArrayList的交集、差集以及并集。实际测试中firstArrayList数据量190000,secondArrayList数据量170000.效率比较高。此处只列出少量数据。测试代码如下:import java.util.Set;

import java.util.List;

import java.util.HashSet;

import java.util.TreeSet;

import java.util.Iterator;

import java.util.ArrayList;

import java.util.LinkedList;

public class getSet {

public static void main(String args[]) {

getList();

}

// 获取两个ArrayList的差集、交集、去重并集(数据量大小不限制)

private static void getList() {

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, List secondArrayList) {

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);

return resultList;

}

/**

* @方法描述:获取两个ArrayList的交集

* @param firstArrayList 第一个ArrayList

* @param secondArrayList 第二个ArrayList

* @return resultList 交集ArrayList

*/

public static List receiveCollectionList(List firstArrayList, List secondArrayList) {

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);

return resultList;

}

/**

* @方法描述:获取两个ArrayList的去重并集

* @param firstArrayList 第一个ArrayList

* @param secondArrayList 第二个ArrayList

* @return resultList 去重并集ArrayList

*/

public static List receiveUnionList(List firstArrayList, List secondArrayList) {

List resultList = new ArrayList();

Set firstSet = new TreeSet(firstArrayList);

for(String id : secondArrayList) {

// 当添加不成功的时候 说明firstSet中已经存在该对象

firstSet.add(id);

}

resultList = new ArrayList(dawjidSet);

return resultList;

}

}打印结果:

===================差集===================

aaa

ddd

===================交集===================

bbb

ccc

=================去重并集==================

aaa

bbb

ccc

ddd

eee

说明,取差集指的是取firstArrayList中存在但secondArrayList中不存在的数据集

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java8获取两个list的交集和差集_JAVA获取两个数据量较大的ArrayList的交集、差集以及并集详解... 的相关文章

随机推荐