黑马程序员技术交流社区

标题: 求集合的并集 两种方法哪种好些 [打印本页]

作者: 赵倩倩    时间: 2012-7-8 16:51
标题: 求集合的并集 两种方法哪种好些
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、我又再想  我为什么要把这些小集合放入大集合中呢 可不可以对集合名称进行编号 直接比较就行了 要不我还得用空间,定义个集合空间   大家啥意见

作者: 蒋映辉    时间: 2012-7-8 17:04
用set跑一遍不就O了么




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2