删除ArrayList Java中的相同值

删除ArrayList Java中的相同值,java,arraylist,Java,Arraylist,我有两个ArrayList,我想删除这些列表之间相同的值,但只出现一次。例如: ArrayList<Integer> a = new ArrayList<>(Arrays.asList(1,2,3,4,5,6)); ArrayList<Integer> b = new ArrayList<>(Arrays.asList(1,2,3,1,2,3)); 假设要返回ArrayList的ArrayList,可以使用以下方法实现: private stat

我有两个ArrayList,我想删除这些列表之间相同的值,但只出现一次。例如:

ArrayList<Integer> a = new ArrayList<>(Arrays.asList(1,2,3,4,5,6));
ArrayList<Integer> b = new ArrayList<>(Arrays.asList(1,2,3,1,2,3));

假设要返回ArrayList的ArrayList,可以使用以下方法实现:

private static ArrayList<ArrayList<Integer>> unique(ArrayList<Integer> a, ArrayList<Integer> b) {
    ArrayList<ArrayList<Integer>> unique = new ArrayList<>();

    unique.add(new ArrayList<>());
    unique.add(new ArrayList<>());


    for (Integer i: a) {
        if (!b.contains(i) && !unique.get(0).contains(i)) {
            unique.get(0).add(i);
        }
    }

    for (Integer i: b) {
        if (a.contains(i) && !unique.get(1).contains(i)) {
            unique.get(1).add(i);
        }
    }

    return unique;
}
专用静态ArrayList unique(ArrayList a、ArrayList b){
ArrayList unique=新的ArrayList();
添加(新的ArrayList());
添加(新的ArrayList());
for(整数i:a){
如果(!b.contains(i)&&!unique.get(0.contains(i)){
唯一。获取(0)。添加(i);
}
}
for(整数i:b){
if(a.contains(i)&&!unique.get(1.contains(i)){
唯一。获取(1)。添加(i);
}
}
返回唯一值;
}

如果您只需要知道一组列表中的唯一元素:

public static <T> ArrayList getUnique(List<T> ... lists){
  Set<T> unique = new HashSet<T>();
  for (List<T> eachList : lists){
    unique.addAll(eachList);
  }
  return new ArrayList(unique);
}
publicstaticarraylistgetunique(列表…列表){
Set unique=新的HashSet();
对于(每个列表:列表){
唯一的.addAll(每个列表);
}
返回新的ArrayList(唯一);
}
你可以这样称呼它:

List<Integer> unique = getUnique(a,b);
List unique=getUnique(a,b);

@lmiguelvargasf-我接受了您的函数并对其进行了一些修改,因为结果表明,您的版本只有在数字已经完全不同的情况下才有效。以下是新功能:

private static ArrayList<ArrayList<Integer>> unique(ArrayList<Integer> a, ArrayList<Integer> b) {
    ArrayList<ArrayList<Integer>> unique = new ArrayList<>();
    unique.add(new ArrayList<>());
    unique.add(new ArrayList<>());

    for (Integer i: a) {
        if (!b.contains(i)) {
            unique.get(0).add(i);
        }else{
            b.remove(i);
        }
    }

    for (Integer i: b) {
        if (!a.contains(i)) {
            unique.get(1).add(i);
        }else{
            b.remove(i);
        }
    }

    return unique;
}
专用静态ArrayList unique(ArrayList a、ArrayList b){
ArrayList unique=新的ArrayList();
添加(新的ArrayList());
unique.add(newarrayList());
for(整数i:a){
如果(!b.包含(i)){
唯一。获取(0)。添加(i);
}否则{
b、 删除(i);
}
}
for(整数i:b){
如果(!a.包含(i)){
唯一。获取(1)。添加(i);
}否则{
b、 删除(i);
}
}
返回唯一值;
}

到目前为止你试过什么吗?你需要它们作为单独的列表,它像[4,5,6],[1,2,3]?或者作为单个[1,2,3,4,5,6]?您使用的是Java8吗?
private static ArrayList<ArrayList<Integer>> unique(ArrayList<Integer> a, ArrayList<Integer> b) {
    ArrayList<ArrayList<Integer>> unique = new ArrayList<>();
    unique.add(new ArrayList<>());
    unique.add(new ArrayList<>());

    for (Integer i: a) {
        if (!b.contains(i)) {
            unique.get(0).add(i);
        }else{
            b.remove(i);
        }
    }

    for (Integer i: b) {
        if (!a.contains(i)) {
            unique.get(1).add(i);
        }else{
            b.remove(i);
        }
    }

    return unique;
}