1、我的方法是将多个集合放入大的集合中 用第一个小集合与其他进行挨个比较 重复元素去掉剩下的加入第一个小集合中 代码如下
import java.util.*;
class JinshanTwo{
public static void main(String[] args){
ArrayList a1 = new ArrayList();
a1.add("a");
a1.add("b");
a1.add("c");
ArrayList a2 = new ArrayList();
a2.add("c");
a2.add("d");
a2.add("e");
ArrayList a3 = new ArrayList();
a3.add("f");
a3.add("e");
ArrayList a4 = new ArrayList();
a4.add("g");
ArrayList a5 = new ArrayList();
a5.add("h");
a5.add("j");
ArrayList lists = new ArrayList();
lists.add(a1);
lists.add(a2);
lists.add(a3);
lists.add(a4);
lists.add(a5);
Bjiao(lists);
System.out.println(lists);
}
public static void Bjiao(ArrayList lists){
//取出一个集合1,遍历其他几个集合,看是否有交集
//for循环的个数是不能少的牙,所以只能让循环的次数减少 那就外循环小内循环大呗、
//又但是 这是顺序不能改变啊
for(int i = 0 ;i< lists.size()-1;i++){
List list1 = (List)lists.get(i);
for(int j = i+1;j < lists.size();j++){
List list2 = (List) lists.get(j);
boolean flag = false;
for(int k = 0 ;k < list2.size();k++){
String str = (String) list2.get(k);
if(list1.contains(str)){
//一旦1,2两个集合有交集终止循环
flag = true;
break;
}
}
if(flag){ //有交集的情况
//将第集合2中的相同元素移去
list2.removeAll(list1);
//将集合2加到几个1中
list1.addAll(list2);
// 在lists中将集合2移除
lists.remove(list2);
Bjiao(lists); //递归调用
}
}
}
}
}
2、我又再想 我为什么要把这些小集合放入大集合中呢 可不可以对集合名称进行编号 直接比较就行了 要不我还得用空间,定义个集合空间 大家啥意见
|