两个LIST合并问题
2009-11-27 17:39
281 查看
前些日子在做项目时,做到两个大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
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合并的问题
- 两个list合并的问题
- 两个list合并的问题
- 将两个list链表通过merge合并时注意的三个问题
- 单链表问题(反转、是否有环、删除结尾第N个节点、合并两个sortlist、找到交点)
- 合并两个类型相同的List
- 合并两个类型相同的List
- 对比两个同类型的泛型集合并返回差异泛型集合 ——两个List<类名>的比较
- Python合并两个List
- 如何将两个List合并,且其中不允许出现重复的项
- C#控制台基础 已知两个list<>集合,除去重复后合并成一个
- 开发:随笔记录之 判断list和map相等,并合并等问题
- 两个数组的合并问题
- 合并两个list集合并且排序
- python中如何将两个list合并成一个list,不用for语句
- 关于直接比较两个对象是否相等或则说List集合里是否包含某个对象的问题
- 合并两个list集合并且排序
- 合并两个List集合
- 23. Merge k Sorted Lists 典型的分治,另,合并两个List的好写法
- 两个数组合并,解决超出数组界限问题