您的位置:首页 > 其它

两个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)效果一样;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: