前些日子在做项目时,做到两个大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)效果一样;

两个LIST合并问题相关推荐

  1. Java合并两个int数组合并_Java中如何把两个数组合并为一个

    在Java中,如何把两个String[]合并为一个? 看起来是一个很简单的问题.但是如何才能把代码写得高效简洁,却还是值得思考的.这里介绍四种方法,请参考选用. 一.apache-commons 这是 ...

  2. Python将两个图像合并成一个图像(横向合并)

    Python将两个图像合并成一个图像(横向合并) 目录 Python将两个图像合并成一个图像(横向合并) #原始图像

  3. c++两个vector合并_这才是真正的 Git:分支合并

    公众号关注 "GitHubDaily"设为 "星标",每天带你逛 GitHub! 本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件 ...

  4. 两个音轨合并_webm格式视频文件合并+weba音频文件无损合并

    WebM 格式,其实是以 Matroska(就是我们熟知的 MKV)容器格式为基础开发的新容器格式,里面包括了 VP8 视频和 Ogg Vorbis 音轨.简单点说webm格式文件可以是视频,也可以是 ...

  5. 两个listmap合并去重_我是如何用单机实现亿级规模题库去重的?

    题外话:欢迎将公众号设置为星标,技术文章第一时间看到.我们将一如既往精选技术好文,提供有价值的阅读.如有读者想要投稿,可以在公众号任意文章下留言,技术博主奖励丰厚. 作者:haolujun cnblo ...

  6. python两列字符串合并_python两列字符串如何合并?

    python两列字符串如何合并?,字符串,变量,方法,语句,就没 python两列字符串如何合并? python两列字符串如何合并? python两列字符串合并的方法: 1.在很多情况下,我们都需要合 ...

  7. c++两个vector合并_这才是真正的 Git——分支合并

    本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的 ...

  8. ubuntu xfce下面两个终端合并为一个终端

    我们现在想把两个终端合并为一个终端,以便于管理 方法如下: ①左侧终端新开一个tab,如下: ②经过上述操作原来的终端就也变成tab了 我们不理会新开的"空白tab",鼠标拖动ta ...

  9. 两个链接合并_如何找到两个链接列表的合并点

    两个链接合并 了解问题 (Understand the Problem) We are given two singly linked lists and we have to find the po ...

  10. 两个音轨合并_两个双音轨mkv视频合并保持原双音轨不变 MKV怎么合并视频,合并之后仍保留MKV的双音轨...

    在写文之前先说明下,笔者在双音轨处理方面接触不久,也只算是半吊子,离砖家级别还有些距离滴,若有不足的地方,欢迎大家补充哈.今天突然想到mkv视频合并的问题,就是MKV怎么合并视频,合并之后要保留MKV ...

最新文章

  1. 未来货运:无人驾驶技术和卡车司机如何配合?
  2. EntityFramework 4.x 使用中遇到的问题 (2)
  3. VMware-使用VMware在本地搭建多个CentOS虚机
  4. OCP换题库了,052新加的考题及答案整理-第16题
  5. BlackHat Arsenal USA 2018 ToolsWatch黑客工具库
  6. WebP 在减少图片体积和流量上的效果如何?—— WebP 技术实践分享
  7. 一种编写测试的好方法
  8. c# 类对象和实例对象_C#类和对象能力问题 套装4
  9. 【支付宝服务窗】JEECG支付宝服务窗平台指南
  10. 《C++ primer》--第11章
  11. monkey基本命令及脚本编写
  12. 配置GoldenGate意外处理及记录Oracle错误信息(1)
  13. 响应式个人简历网页源代码
  14. 语音 AI 技术简介
  15. Mac电脑无法从Photoshop 2020作为插件访问DeNoise AI的解决办法
  16. scratch ios html,scratch手机版
  17. Java Swing绘制箭头
  18. 微信小程序展示动态背景图(含三目运算符)
  19. 漫威商业逆袭成功秘诀
  20. 正则中的()、[]、{}

热门文章

  1. c++数独游戏3.1
  2. 在Eclipse下开发Robocode
  3. k8s join 集群报错之error execution phase kubelet-start: error uploading crisocket:
  4. NAVEX:为动态Web应用程序生成精确且可扩展的漏洞
  5. 如何获取彩色图像中的主色彩
  6. Go游戏服务器开发的一些思考(三十):排行榜服务器设计思路
  7. 关于HIPO和IPO
  8. R语言图形编辑器GUI开发环境RStudio安装(Windows操作系统下、RStudio开发环境安装)
  9. 程序员,不甘平凡又害怕努力… 1
  10. ETHA Lend完成160万美元融资---为DeFi领域带来全新的收益优化协议