Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何合并两个没有重复项的ArrayList?_Java_Arraylist - Fatal编程技术网

Java 如何合并两个没有重复项的ArrayList?

Java 如何合并两个没有重复项的ArrayList?,java,arraylist,Java,Arraylist,我有两个数组列表 ArrayList one = {A, B, C, D, E} ArrayList two = {B, D, F, G} 我想要有我的最终ArrayList,它将包含一的所有元素,以及只包含在两个元素中而不包含在一个元素中的元素 所以 ArrayList final={A,B,C,D,E,F,G} 我该怎么做 for (Object x : two){ if (!one.contains(x)) one.add(x); } 假设您不想使用注释中建议的集

我有两个数组列表

ArrayList one = {A, B, C, D, E}
ArrayList two = {B, D, F, G}  
我想要有我的最终ArrayList,它将包含一的所有元素,以及只包含在两个元素中而不包含在一个元素中的元素

所以 ArrayList final={A,B,C,D,E,F,G}

我该怎么做

for (Object x : two){
   if (!one.contains(x))
      one.add(x);
}

假设您不想使用注释中建议的集合。如果您正在寻找比这更新奇的东西,请澄清您的问题。

您可以这样做:

ArrayList<Object> result = new ArrayList<>();
result.addAll(one);

for(Object e: two){
    if(!result.contains(e))
        result.add(e);
}
ArrayList结果=新建ArrayList();
结果:全部(1);
用于(对象e:两个){
如果(!result.contains(e))
结果.添加(e);
}

试试这种东西。由于
Set
不允许重复,您只能添加更改

ArrayList<String> a=new ArrayList<>();
a.add("a");
a.add("b");
ArrayList<String> b=new ArrayList<>();
a.add("a");
a.add("c");
Set<String> s=new HashSet<String>();
s.addAll(a);
s.addAll(b);
a=new ArrayList<>(s);
for(String r:a){
    System.out.println(r);
}
ArrayList a=新的ArrayList();
a、 添加(“a”);
a、 添加(“b”);
ArrayList b=新的ArrayList();
a、 添加(“a”);
a、 添加(“c”);
Set s=新的HashSet();
s、 阿道尔(a);
s、 阿道尔(b);
a=新阵列列表;
for(字符串r:a){
系统输出println(r);
}
以下任一项:

Set<Foo> fooSet = new LinkedHashSet<>(one);
fooSet.addAll(two);
List<Foo> finalFoo = new ArrayList<>(fooSet);
Set fooSet=newlinkedhashset(一个);
fooSet.addAll(两个);
List finalFoo=newarraylist(fooSet);

List twoocopy=new ArrayList(两个);
两份。移除所有(一份);
一份。全部添加(两份);

是否可以使用
设置?这要求列表一中的项目是唯一的。我不熟悉Set。所以我不喜欢用它。我的设备中有Java1.2,不熟悉并不是回避优秀数据类型的理由<代码>设置
在1.2中提供。你必须回答的问题是:你想在你的最终列表/集合中有任何重复的吗?@DuncanJones不,我不想在我的最终列表/集合中有任何重复的。您能告诉我如何使用SET执行此操作吗?至少已经向您演示了如何执行此操作。您需要初始化
result
。你可以只做
arraylistresult=newarraylist(一)而不是第一个循环。@Keppil这不是确切的代码,arraylist应该是泛型的,我只是给出了一个idea@ay89OP使用的是Java1.2,因此没有泛型。对于每个泛型,Java版本1.2或1.4都不支持。我的设备运行的是java 1.2。因此,不要对每个设备使用a,而要对每个设备使用a。。我就是这么想的。但是我只是想知道是否有更好的方法或者这是最好的方法……如果你想坚持使用
列表
,这是一种完全可以接受的方法。根据数据集的大小,
分类列表
可能会为您提供更好的性能,即使您必须复制回
列表
@JohnB您的解决方案是O(n^2),对吗?您的代码片段不必要地大。假设我们知道如何将其打包到
main
中,以及在哪里可以找到正常导入。只包含代码。但是,OP使用的是Java 1.2,因此重写以删除泛型可能更好。对于第二个解决方案,为什么我们要创建一个twoCopy?我们能就一个吗;一.添加全部(两个):?仅当您不想修改原始的两个列表时,才需要副本。关于第二个问题:元素的顺序不一样。@CongWang,以防您不需要原始的
two
列表。您可以
two.removeAll(一);一个。添加所有(两个)
List<Foo> twoCopy = new ArrayList<>(two);
twoCopy.removeAll(one);
one.addAll(twoCopy);