两个list集合找出相同元素和不同元素

本文介绍了一个实用的集合操作工具类,包含找出两个集合之间的不同元素、相同元素以及去除重复的不同元素的功能。通过高效的算法实现,适用于Java开发中常见的集合操作需求。

package com.zkdj.shiro.utils;

 

import java.util.Collection;

import java.util.HashMap;

import java.util.HashSet;

import java.util.Iterator;

import java.util.LinkedList;

import java.util.Map;

 

public class CollectionUtil {

 

private CollectionUtil() {

}

 

/**

* 找出第一个集合中不存在与第二个集合的元素

*

* @param collmax

* @param collmin

* @return

*/

@SuppressWarnings({ "rawtypes", "unchecked" })

public static Collection getDifferent(Collection collmax, Collection collmin) {

//使用LinkedList防止差异过大时,元素拷贝

Collection csReturn = new LinkedList();

Collection max = collmax;

Collection min = collmin;

//先比较大小,这样会减少后续map的if判断次数

// if (collmax.size() < collmin.size()) {

// max = collmin;

// min = collmax;

// }

//直接指定大小,防止再散列

Map<Object, Integer> map = new HashMap<Object, Integer>(max.size());

for (Object object : max) {

map.put(object, 1);

}

for (Object object : min) {

if (map.get(object) == null) {

// csReturn.add(object);

} else {

map.put(object, 2);

}

}

for (Map.Entry<Object, Integer> entry : map.entrySet()) {

if (entry.getValue() == 1) {

csReturn.add(entry.getKey());

}

}

Iterator<String> it = csReturn.iterator() ;

while(it.hasNext()) {

String str = it.next() ;

if(str.equals(" ")||str.equals("")) {

it.remove();//此处删除集合中的一个元素

}

}

return csReturn;

}

 

/**

* 找出两个集合中相同的元素

*

* @param collmax

* @param collmin

* @return

*/

@SuppressWarnings({ "rawtypes", "unchecked" })

public static Collection getSame(Collection collmax, Collection collmin) {

//使用LinkedList防止差异过大时,元素拷贝

Collection csReturn = new LinkedList();

Collection max = collmax;

Collection min = collmin;

//先比较大小,这样会减少后续map的if判断次数

if (collmax.size() < collmin.size()) {

max = collmin;

min = collmax;

}

//直接指定大小,防止再散列

Map<Object, Integer> map = new HashMap<Object, Integer>(max.size());

for (Object object : max) {

map.put(object, 1);

}

for (Object object : min) {

if (map.get(object) != null) {

csReturn.add(object);

}

}

return csReturn;

}

 

/**

* 获取两个集合的不同元素,去除重复

*

* @param collmax

* @param collmin

* @return

*/

@SuppressWarnings({ "rawtypes", "unchecked" })

public static Collection getDiffentNoDuplicate(Collection collmax, Collection collmin) {

return new HashSet(getDifferent(collmax, collmin));

}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值