两个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)效果一样;
两个LIST合并问题相关推荐
- Java合并两个int数组合并_Java中如何把两个数组合并为一个
在Java中,如何把两个String[]合并为一个? 看起来是一个很简单的问题.但是如何才能把代码写得高效简洁,却还是值得思考的.这里介绍四种方法,请参考选用. 一.apache-commons 这是 ...
- Python将两个图像合并成一个图像(横向合并)
Python将两个图像合并成一个图像(横向合并) 目录 Python将两个图像合并成一个图像(横向合并) #原始图像
- c++两个vector合并_这才是真正的 Git:分支合并
公众号关注 "GitHubDaily"设为 "星标",每天带你逛 GitHub! 本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件 ...
- 两个音轨合并_webm格式视频文件合并+weba音频文件无损合并
WebM 格式,其实是以 Matroska(就是我们熟知的 MKV)容器格式为基础开发的新容器格式,里面包括了 VP8 视频和 Ogg Vorbis 音轨.简单点说webm格式文件可以是视频,也可以是 ...
- 两个listmap合并去重_我是如何用单机实现亿级规模题库去重的?
题外话:欢迎将公众号设置为星标,技术文章第一时间看到.我们将一如既往精选技术好文,提供有价值的阅读.如有读者想要投稿,可以在公众号任意文章下留言,技术博主奖励丰厚. 作者:haolujun cnblo ...
- python两列字符串合并_python两列字符串如何合并?
python两列字符串如何合并?,字符串,变量,方法,语句,就没 python两列字符串如何合并? python两列字符串如何合并? python两列字符串合并的方法: 1.在很多情况下,我们都需要合 ...
- c++两个vector合并_这才是真正的 Git——分支合并
本文作者:lzaneli,腾讯 TEG 前端开发工程师 "合并前文件还在的,合并后就不见了"."我遇到 Git 合并的 bug 了" 是两句经常听到的话,但真的 ...
- ubuntu xfce下面两个终端合并为一个终端
我们现在想把两个终端合并为一个终端,以便于管理 方法如下: ①左侧终端新开一个tab,如下: ②经过上述操作原来的终端就也变成tab了 我们不理会新开的"空白tab",鼠标拖动ta ...
- 两个链接合并_如何找到两个链接列表的合并点
两个链接合并 了解问题 (Understand the Problem) We are given two singly linked lists and we have to find the po ...
- 两个音轨合并_两个双音轨mkv视频合并保持原双音轨不变 MKV怎么合并视频,合并之后仍保留MKV的双音轨...
在写文之前先说明下,笔者在双音轨处理方面接触不久,也只算是半吊子,离砖家级别还有些距离滴,若有不足的地方,欢迎大家补充哈.今天突然想到mkv视频合并的问题,就是MKV怎么合并视频,合并之后要保留MKV ...
最新文章
- 未来货运:无人驾驶技术和卡车司机如何配合?
- EntityFramework 4.x 使用中遇到的问题 (2)
- VMware-使用VMware在本地搭建多个CentOS虚机
- OCP换题库了,052新加的考题及答案整理-第16题
- BlackHat Arsenal USA 2018 ToolsWatch黑客工具库
- WebP 在减少图片体积和流量上的效果如何?—— WebP 技术实践分享
- 一种编写测试的好方法
- c# 类对象和实例对象_C#类和对象能力问题 套装4
- 【支付宝服务窗】JEECG支付宝服务窗平台指南
- 《C++ primer》--第11章
- monkey基本命令及脚本编写
- 配置GoldenGate意外处理及记录Oracle错误信息(1)
- 响应式个人简历网页源代码
- 语音 AI 技术简介
- Mac电脑无法从Photoshop 2020作为插件访问DeNoise AI的解决办法
- scratch ios html,scratch手机版
- Java Swing绘制箭头
- 微信小程序展示动态背景图(含三目运算符)
- 漫威商业逆袭成功秘诀
- 正则中的()、[]、{}
热门文章
- c++数独游戏3.1
- 在Eclipse下开发Robocode
- k8s join 集群报错之error execution phase kubelet-start: error uploading crisocket:
- NAVEX:为动态Web应用程序生成精确且可扩展的漏洞
- 如何获取彩色图像中的主色彩
- Go游戏服务器开发的一些思考(三十):排行榜服务器设计思路
- 关于HIPO和IPO
- R语言图形编辑器GUI开发环境RStudio安装(Windows操作系统下、RStudio开发环境安装)
- 程序员,不甘平凡又害怕努力… 1
- ETHA Lend完成160万美元融资---为DeFi领域带来全新的收益优化协议