请教两个ArrayList合并,并且去掉重复数据的算法

一时想不明白了,求一个高效的算法,描述如下:有两个ArrayList,分别为list1和list2,分析这两个list后生成list3,要求如果在list1和list2中... 一时想不明白了,求一个高效的算法,描述如下:

有两个ArrayList,分别为list1和list2,分析这两个list后生成list3,要求如果在list1和list2中重复的数据就都删去,如果不重复就都写入list3,例如

list1中保存了1,2,3,4,5,6,7,8
list2中保存了6,7,8,9,10,11
那么list3为1,2,3,4,5,9,10,11

再例如
list1中保存了1,2,3,4
list2中保存了9,10,11
那么list3为1,2,3,4,9,10,11

前提是:list1和list2都可能为空
要求:Java语言实现
展开
 我来答
lvxianling
2009-11-25 · TA获得超过639个赞
知道小有建树答主
回答量:279
采纳率:0%
帮助的人:196万
展开全部
import java.util.*;
public class Test {
public static void main(String[] args){
List <Integer> l1=new ArrayList<Integer>();
l1.add(1);l1.add(2);l1.add(3);
l1.add(4);l1.add(5);l1.add(6);
List <Integer> l2=new ArrayList<Integer>();
l2.add(4);l2.add(5);l2.add(6);
l2.add(7);l2.add(8);l2.add(9);

Set<Integer> s=new TreeSet(l1);
for(Integer i:l2){
//当添加不成功的时候 说明s中已经存在该对象,直接remove掉该对象即可
if(!s.add(i)) s.remove(i);
}
System.out.println(s);
//还可以用下面一种方法
List <Integer> temp=new ArrayList<Integer>(l1);//用来保存两者共同有的数据
temp.retainAll(l2);
l1.removeAll(temp);//l1中去掉两者共同有的数据
l2.removeAll(temp);//l2中去掉两者共同有的数据

List <Integer> l3=new ArrayList<Integer>();
l3.addAll(l1);
l3.addAll(l2);
System.out.println(l3);

}
}
Christ_earl
2009-11-25 · TA获得超过1245个赞
知道小有建树答主
回答量:239
采纳率:0%
帮助的人:0
展开全部
public class lianxi {

public static void main(String args[]) {
List<Integer> list1 = new ArrayList<Integer>();
for(int i = 1;i<9;i++){
list1.add(i);
}

List<Integer> list2 = new ArrayList<Integer>();
for(int i = 6;i<13;i++){
list2.add(i);
}

//先将list1和list2都加入list3
List<Integer> list3 = new ArrayList<Integer>();
list3.addAll(list1);
list3.addAll(list2);

List<Integer> list4 = new ArrayList<Integer>();//该集合用来存放list1和list2中相同数据

for(int i =0; i<list1.size();i++){
for(int j = 0;j<list2.size();j++){
if(list1.get(i)==list2.get(j)){
list4.add(list1.get(i));
}
}
}
list3.removeAll(list4);//删除list中的相同数据
System.out.print(list3);
}
}
结果是:
[1, 2, 3, 4, 5, 9, 10, 11, 12]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友16ee7ec98
2009-11-25 · TA获得超过1117个赞
知道小有建树答主
回答量:272
采纳率:0%
帮助的人:396万
展开全部
package test;

import java.util.*;

public class Test {
public static void main(String[] args) {
List<Integer> l1 = new ArrayList<Integer>();
List<Integer> l2 = new ArrayList<Integer>();
l1.add(1);
l1.add(2);
l1.add(3);
l2.add(3);
l2.add(4);
l2.add(5);
for(Integer i:l2)
{
l1.remove(i);
}
l1.addAll(l2);
System.out.println(l1);

}

}
结果:[1, 2, 3, 4, 5]
我个人认为这样比较高效,如果不怕代码麻烦你还可以判断一下哪个list的size小就去遍历哪个list,然后用另一个作为list3
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
w1985g
2009-11-25 · TA获得超过1633个赞
知道小有建树答主
回答量:1190
采纳率:100%
帮助的人:1043万
展开全部
@SuppressWarnings("unchecked")
public static ArrayList addArrayList(ArrayList list1, ArrayList list2) {
ArrayList list3 = new ArrayList();
if (list1 == null || list1.size() == 0) {
list3 = list2;
} else if (list2 == null || list2.size() == 0) {
list3 = list1;
} else {
for (int i = 0; i < list1.size(); i++) {// 遍历list1
boolean isExist = false;
for (int j = 0; j < list2.size(); j++) {
if (list1.get(i).equals(list2.get(j))) {
isExist = true;// 找到相同项,跳出本层循环
break;
}
}
if (!isExist) {// 不相同,加入list3中
list3.add(list1.get(i));
}
}

for (int k = 0; k < list2.size(); k++) {
list3.add(list2.get(k));
}
}
return list3;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
寻帆浪子
2009-11-25 · TA获得超过267个赞
知道小有建树答主
回答量:284
采纳率:0%
帮助的人:187万
展开全部
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;

public class GetOffRepeat {

public static void main(String[] args){
Set<Integer> s = new HashSet<Integer>();
List<Integer> a = new ArrayList<Integer>();
List<Integer> b = new ArrayList<Integer>();
a.add(1); a.add(2); a.add(3); a.add(4); a.add(5);
b.add(6); b.add(7); b.add(8); b.add(4); b.add(5);
s.addAll(a); s.addAll(b);
print(a.iterator());
print(b.iterator());
print(s.iterator());
}

public static void print(Iterator<Integer> it){
while(it.hasNext()){
System.out.print(it.next()+" ");
}
System.out.println();
}
}

直接利用java里面容器的性质吧。。 set容器里的元素都是具有唯一性的,所以可以利用这一点来处理你这个问题,上面是随便写的一个demo,相信你看看就能明白了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式