在实现数据挖掘一些算法或者是利用空间向量模型来发现相似文档的时候,会遇到求两个集合的交集的情况。以前一般是采用比较笨拙的办法,依次遍历其中一个集合的元素,然后判断它是否包含在另一个集合中。这样做非常机械繁琐,代码编得让人心烦,其实java的api中提供了对集合进行交、并、差运算的功能,灰常强大!看下面的例子:
public class SetOpt {
public List intersect(List ls, List ls2) {
List list = new ArrayList(Arrays.asList(new Object[ls.size()]));
Collections.copy(list, ls);
list.retainAll(ls2);
return list;
}
public List union(List ls, List ls2) {
List list = new ArrayList(Arrays.asList(new Object[ls.size()]));
Collections.copy(list, ls);
list.addAll(ls2);
return list;
}
public List diff(List ls, List ls2) {
List list = new ArrayList(Arrays.asList(new Object[ls.size()]));
Collections.copy(list, ls);
list.removeAll(ls2);
return list;
}
public static void main(String[] args) {
SetOpt opt = new SetOpt();
List l1 = new ArrayList();
l1.add(1);
l1.add(2);
l1.add(3);
l1.add(4);
List l2 = new ArrayList();
l2.add(3);
l2.add(4);
l2.add(5);
l2.add(6);
List intersectList = opt.intersect(l1, l2);
System.out.println("交集:");
for (int i = 0; i < intersectList.size(); i++) {
System.out.print(intersectList.get(i) + " ");
}
System.out.println();
List unionList = opt.union(l1, l2);
System.out.println("并集:");
for (int i = 0; i < unionList.size(); i++) {
System.out.print(unionList.get(i) + " ");
}
System.out.println();
List diffList = opt.diff(l1, l2);
System.out.println("差集:");
for (int i = 0; i < diffList.size(); i++) {
System.out.print(diffList.get(i) + " ");
}
System.out.println();
}
}
测试结果:
交集:
3 4
并集:
1 2 3 4 3 4 5 6
差集:
1 2
--------------------------------------------------------------------------------------------------------------------------------
多集合的交集:
public List<Integer> retainAllList(List<List<Integer>> allList)
{
List<Integer> listTempA = new ArrayList<Integer>();
for(int i=0;i<allList.size();i++)
{
listTempA = allList.get(i);
for(List<Integer> listTempB:allList)
{
listTempA.retainAll(listTempB);
}
}
return listTempA;
}
注意:在进行两个集合(操作集合和被操作集合)交、并、差操作时,一定要先将操作集合拷贝一份,以拷贝的集合作为操作集合来进行运算。否则,将改变原来操作集合的内容。
分享到:
相关推荐
c++程序设计实现集合交集并集差集.docx
c++程序设计实现集合交集并集差集.pdf
050.Python集合_特点_创建和删除_交集并集差集运算.mp4
利用带头结点的单链表实现两个集合的并、交、差运算。(难易程度:低) [实验目的] ...3、显示两个集合的内容及其并集、交集和差集的内容。 4、要求不改变原来的集合,并集、交集和差集分别另外存放。
利用简单的的方式里完成数据结构里的一些集合的基本运算
自创 链表 C++ 集合运算,是学习C++常会遇到的题目
写得比较简单,随便看看就好 该代码是离散数学的一些简单运算
Delphi 两个多边形求交集、并集、差集的源码,使用的是D5,非常古老的版本了,但能解决问题,程序使用标记法,速度非常快,解决了C语言中关于高精度重叠边的问题,示例程序是从CAD中读取多边形数据,方便演示各种...
主要介绍了Java计算交集,差集,并集的方法,结合实例形式简单分析了java集合运算的简单操作技巧,需要的朋友可以参考下
主要介绍了JS实现集合的交集、补集、差集、去重运算,结合实例形式分析了ES5与ES6语法环境下的集合常见运算操作技巧,需要的朋友可以参考下
本程序是运用C++数组可现简单的 集合运算 如并集,交集,差集,和笛卡尔积~~
在数学中,我们经常需要对矢量之间的关系进行分析,包括求交集、并集和差集等运算。下面将对这些概念进行具体解释。 1. 交集: 矢量的交集是指两个矢量中共同存在的元素所构成的集合。假设有两个矢量A和B,它们分别...
1.有序顺序表的元素按照从小到大有序存储; 2.实现有序顺序表的类模板,它的操作如下: ...3.用有序顺序表表示集合,实现两个有序顺序表的并和交(并和交仍是有序顺序表)并分析它们的时间复杂度;
数据结构C语言版链表的集合运算,包含交集、并集、差集。
集合的交集、并集、差集运算是考察的常规内容,这里给出交集的代码,并集跟差集的类似
有序顺序表实现集合的各种运算 用有序顺序表完成集合与集合的交集,差集,并集,包含于之间的运算以及元素与集合的判断关系
离散数学作业:JAVA实现集合(用HashSet实现)及其运算(交集,并集,差集,判断是否包含某元素等)
在下不才初学java,用java写了一个求两个集合的集合运算,若程序中有漏洞请各位大虾指出谢谢啦!
主要介绍了Python求两个文本文件以行为单位的交集、并集与差集的方法,涉及Python文本文件与集合运算的相关技巧,需要的朋友可以参考下
并集:两个集合的并集是一个包含集合A和B中所有元素的集合。 在T-SQL中。UNION集合运算可以将两个输入查询的结果组合成一个结果集。需要注意的是:如果一个行在任何一个输入集合中出现,它也会在UNION运算的结果中...