两个LIST合并问题

  前些日子在做项目时,做到两个大LIST合并的问题,由于时间比较紧没有时间仔细琢磨一下效率问题。刚好从CSDN的论坛上看到此问题。
   有两个LIST
      ArrayList <Integer> list1=new  ArrayList <Integer>();
  
   list1.add(13);
   list1.add(23);
   list1.add(33);
   list1.add(43);
   list1.add(53);
   ArrayList <Integer> list2=new  ArrayList <Integer>();
   list2.add(14);
   list2.add(24);
   list2.add(34);
   list2.add(43);
   list2.add(53);
合并成一个LIST,要求去掉相同的数据。
  1:用(Array)List.removeAll/addAll,保留顺序;
  2:用TreeSet;
  3:用hashset;
 先谈论一下基本使用方法,对基础方法的一个补充:
先写个打印方法:
 public static void printlnList(ArrayList <Integer> list1,String str){
   System.out.print(str+"=>");
   //for(int i=0;i<list1.size(); i++){
  //  System.out.print(list1.get(i)+",");
  // }
   for(Iterator <Integer> inte=list1.iterator();inte.hasNext();){
   System.out.print(inte.next().toString()+",");
   }
   System.out.println(" ");
  }
 1:用(Array)List.removeAll/addAll
  代码:
   public static void ArrayListSort(ArrayList <Integer> list1,ArrayList <Integer> list2){
   //(Array)List.removeAll/addAll/retainAll
  printlnList(list1,"org list1");
  printlnList(list2,"org list2");
  ArrayList <Integer> newList=new  ArrayList <Integer>();
  ArrayList <Integer> newList2=new  ArrayList <Integer>();
  ArrayList <Integer> newList3=new  ArrayList <Integer>();
  newList2.addAll(list1);
  newList3.addAll(list2);
  newList2.removeAll(newList3);
  newList.addAll(newList2);
  newList.addAll(newList3);
  printlnList(newList,"newList");
 
  }
    开发过程中遇到的问题:
  
      1): 想组合成新的LIST后原始的两个LIST值不发生改变
      ArrayList <Integer> newList2=list1;
      newList2.removeAll(list2);
      出现问题是list1的值发生改变,操作list1运算就是操作list1;
     要达到这种效果是:
   
      ArrayList <Integer> newList2=new  ArrayList <Integer>();
      newList2.addAll(list1);
     2):retainAll是将list1和list2相同的值找出来
        list1.retainAll(list2);

2:用hashset;效率比较高
    public static void hashListSort(ArrayList <Integer> list1,ArrayList <Integer> list2){
   printlnList(list1,"org list1");
   printlnList(list2,"org list2");
   HashSet hash = new HashSet(list2);
  hash.removeAll(list1);
  printlnList(list2,"new list2");
   list1.addAll(hash);
   printlnList(list1,"hashListSort list1");
  }
   1): 想组合成新的LIST后原始的两个LIST值不发生改变,可以直接用
     HashSet hash = new HashSet(list2);

   2):retainAll是将list1和list2相同的值找出来
        hash.retainAll(list2);
3:用TreeSet,结果自动从小到大排序;
 public static void TreeSetSort(ArrayList <Integer> list1,ArrayList <Integer> list2){
   printlnList(list1,"org list1");
   printlnList(list2,"org list2");
   Set set = new TreeSet();
   set.addAll(list1);
   set.addAll(list2);
   Set set1 = new TreeSet(list1);
   Set set2 = new TreeSet(list2);
   set1.removeAll(set2);
   printlnList(new ArrayList(set1),"TreeSetSort set1");
   printlnList(list1,"TreeSetSort list1");
   printlnList(new ArrayList(set),"TreeSetSort list");
  }
  1): 想组合成新的LIST后原始的两个LIST值不发生改变,可以直接用
       Set set1 = new TreeSet(list1);
     
   2):retainAll是将list1和list2相同的值找出来
        set1.removeAll(set2);和set1.removeAll(list2)效果一样;

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值