如何在Java中的多个ArrayList中查找唯一元素
我有多个如何在Java中的多个ArrayList中查找唯一元素,java,set,unique,Java,Set,Unique,我有多个整数数组列表,其中包含一些重复的元素。我想从他们那里得到独特的元素。但是怎么做呢? java.util.ArrayList.removeAll()不能完全满足我的需要。请参阅下面的测试代码- ArrayList<Integer> d = new ArrayList<Integer>(); d.add(2); d.add(4); d.add(5); d.add(7); d.add(8); d.add(9); ArrayList<Integer> e =
整数数组列表
,其中包含一些重复的元素。我想从他们那里得到独特的元素。但是怎么做呢?java.util.ArrayList.removeAll()
不能完全满足我的需要。请参阅下面的测试代码-
ArrayList<Integer> d = new ArrayList<Integer>();
d.add(2);
d.add(4);
d.add(5);
d.add(7);
d.add(8);
d.add(9);
ArrayList<Integer> e = new ArrayList<Integer>();
e.add(3);
e.add(7);
d.removeAll(e);
for (int t : d) {
System.out.print(t+", ");
}
ArrayList d=new ArrayList();
d、 增加(2);
d、 增加(4);
d、 增加(5);
d、 增加(7);
d、 增加(8);
d、 增加(9);
ArrayList e=新的ArrayList();
e、 增加(3);
e、 增加(7);
d、 removeAll(e);
for(int t:d){
系统输出打印(t+“,”);
}
在输出中,我得到2,4,5,8,9,
。显然,3
缺失。为了简单起见,我在这里只使用了两个ArrayList
,但在我的代码中,我有两个以上的ArrayList
如何在Java中的多个ArrayList中找到唯一的元素从列表创建集合
。该集合将不包含重复的对象:
List<Integer> lstNumbers = new ArrayList<Integer>();
//fill the list of integers...
Set<Integer> setNumbers = new HashSet<Integer>(lstNumbers);
//the set will contain no duplicate values...
for (int t : setNumbers) {
System.out.print(t+", ");
}
此外,作为最佳实践,尝试编程到接口(列表、集合等),而不是类实现(ArrayList、HashSet),如下所示:使用java.util.HashSet
Set<Integer> uniqueEntries = new HashSet<Integer>();
for(all lists)
uniqueEntries.addAll(list);
ArrayList<Integer> d = new ArrayList<Integer>();
d.add(2);
d.add(4);
d.add(5);
d.add(7);
d.add(8);
d.add(9);
d.add(3);
d.add(7);
// this will remove all duplicates
Set setNew = new HashSet(d);
System.out.print(setNew);
Set uniqueEntries=new HashSet();
对于(所有列表)
uniqueEntries.addAll(列表);
现在,set uniqueEntries将包含所有唯一的整数值。使用set
Set<Integer> uniqueEntries = new HashSet<Integer>();
for(all lists)
uniqueEntries.addAll(list);
ArrayList<Integer> d = new ArrayList<Integer>();
d.add(2);
d.add(4);
d.add(5);
d.add(7);
d.add(8);
d.add(9);
d.add(3);
d.add(7);
// this will remove all duplicates
Set setNew = new HashSet(d);
System.out.print(setNew);
ArrayList d=new ArrayList();
d、 增加(2);
d、 增加(4);
d、 增加(5);
d、 增加(7);
d、 增加(8);
d、 增加(9);
d、 增加(3);
d、 增加(7);
//这将删除所有重复项
Set setNew=新哈希集(d);
系统输出打印(setNew);
ArrayList d=new ArrayList();
d、 增加(2);
d、 增加(4);
d、 增加(5);
d、 增加(7);
d、 增加(8);
d、 增加(9);
ArrayList e=新的ArrayList();
e、 增加(3);
e、 增加(7);
列表温度=新阵列列表(d);
System.out.println(“d-->”+d);
System.out.println(“e-->”+e);
d、 removeAll(e);
e、 移除所有(临时);
d、 addAll(e);
System.out.println(“d-->”+d);
/*ArrayList唯一和重复记录打印*/
导入java.util.*;
导入java.lang.*;
导入java.io.*;
/*只有当类是公共的时,类的名称才必须是“Main”*/
表意文字
{
公共静态void main(字符串[]args)引发java.lang.Exception
{
ArrayList d=新的ArrayList();
d、 增加(2);
d、 增加(4);
d、 增加(5);
d、 增加(7);
d、 增加(8);
d、 增加(9);
ArrayList e=新的ArrayList();
e、 增加(3);
e、 增加(7);
列表温度=新阵列列表(e);
System.out.println(“d-->”+d);
System.out.println(“e-->”+e);
e、 removeAll(d);
温度移除所有(e);
System.out.println(“e(唯一)-->”+e);
系统输出打印项次(“温度(副本)-->”+温度);
}
}
您可以更简单地执行此操作
ArrayList first=新的ArrayList;ArrayList秒
=新阵列列表
为了找到独特的元素。。
第一,保留(第二) 首先,我需要添加所有的ArrayList
,然后我必须创建HashSet
。我说的对吗?@RaviJoshi是的,首先用重复的元素填充数组列表
,然后为链接@LuiggiMendoza创建集
+1。。很高兴你根据我的评论更新了你的答案。我猜你从一开始就错过了这一点question@Muklas是的,这对String
s很好,基本上是因为HashSet
使用hashCode
和equals
方法,String实现了它。您也可以使用自己的类来检查唯一的结果,只要您使用HashSet
,并且您的类也实现了这些方法。根据您的代码,您得到的输出是显而易见的。我的理解是,7
是常见的,只有7个应该删除,3个应该添加。。。正当然后使用设置。它不会添加重复项。。。这样,您将拥有所有唯一的列表…您可以使用集合作为HashSet
构造函数中的参数。是的,我们可以。但他不是只有一个arraylist。他需要添加多个数组列表。因此,构造函数无法完成全部任务,因为他必须遍历所有ArrayList的整个列表。我最喜欢。你真厉害,伙计。非常感谢。我现在明白了。
/* ArrayList Unique & Duplicate Records Print */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
ArrayList<Integer> d = new ArrayList<Integer>();
d.add(2);
d.add(4);
d.add(5);
d.add(7);
d.add(8);
d.add(9);
ArrayList<Integer> e = new ArrayList<Integer>();
e.add(3);
e.add(7);
List<Integer> temp = new ArrayList<Integer>(e);
System.out.println("d --> " + d);
System.out.println("e --> " + e);
e.removeAll(d);
temp.removeAll(e);
System.out.println("e (unique)--> " + e);
System.out.println("temp (duplicate) --> " + temp);
}
}
first.add("one");
first.add("two");
first.add("three");
second.add("two");
second.add("three");