0

我有多个Integer ArrayList,其中包含一些重复的元素。我想从他们那里得到独特的元素。但是怎么做?
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+", ");
}

在输出中,我得到2, 4, 5, 8, 9,. 明显3不见了。也只是为了简单起见,我在ArrayList这里只使用了两个,但在我的代码中,我有两个以上的ArrayList.

如何在 Java 中的多个 ArrayList 中找到唯一元素

4

6 回答 6

3

Set<Integer>您的List<Integer>. 该集合将不包含重复的对象:

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+", ");
}

请注意,您可以通过使用该方法(如 rahulroc 答案中所示)在不重复元素集合中添加更多整数来添加更多整数List<Integer>SetSet#addAll

//assuming setNumbers has been initialized before
setNumbers.addAll(anotherListOfNumbers);
setNumbers.addAll(andAnotherListOfNumbers);

此外,作为最佳实践,尝试对接口(List、Set 等)进行编程,而不是对类实现(ArrayList、HashSet),如下所示:“对接口进行编程”是什么意思?

于 2012-12-08T13:18:07.367 回答
2

采用java.util.HashSet

Set<Integer> uniqueEntries = new HashSet<Integer>();
for(all lists)
     uniqueEntries.addAll(list);

现在设置的 uniqueEntries 将包含所有唯一的整数值。

于 2012-12-08T13:21:24.860 回答
2

采用Set

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);

演示

于 2012-12-08T13:26:53.917 回答
0
 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>(d);

        System.out.println("d --> " + d);
        System.out.println("e --> " + e);

        d.removeAll(e);
        e.removeAll(temp);
        d.addAll(e);

        System.out.println("d --> " + d);
于 2013-08-10T06:18:58.243 回答
0
/* 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);
    }
}
于 2014-12-29T23:57:02.093 回答
0

你可以更简单地做到这一点。

ArrayList first = new Arraylist<>; ArrayList 第二 = 新的 ArrayList<>;

   first.add("one"); 
   first.add("two");  
   first.add("three"); 
   second.add("two");  
   second.add("three");

为了找到独特的元素.. first.retainall(second);

于 2015-10-30T07:46:10.180 回答