java 交集操作的效率_JAVA获取两个数据量较大的ArrayList的交集、差集以及并集

测试说明:获取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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值