比较Java中的两个arraylist

时间:2012-10-16 13:55:25

标签: java arraylist

我有两个数组列表listA和listB,它们可能包含也可能不包含相同的元素。 例如:

listA= [1,2,3] &
listB=[2,3,4]

我需要比较两个数组列表,并将listA中存在的元素添加到listB中而不是listB中。此外,如果列表B中存在的任何其他元素不在listA中,我应该从listB中删除它。

请帮助我如何使用Java编写代码。

如果需要,我更喜欢使用Iterator方法。

3 个答案:

答案 0 :(得分:1)

您的描述表明您希望使用套装。例如,假设元素在A中两次但仅在B中一次。它应该被添加到B吗?

您问题的最简单答案是

List listA = ...
List listB = ...

listB.clear();
listB.addAll(listA);

但是假设你想保留一些订单,你可以做。

List listA = ...
List listB = ...
Set setA = new HashSet(listA);
setA.removeAll(listB);

Set setB = new HashSet(listB);
setB.removeAll(listA);

listB.addAll(setA);
listB.removeAll(setB);

注意:如果元素的A超过B,则不会添加条目,如果B的元素多于A,则不会删除条目。

答案 1 :(得分:0)

试试这个

for(int i : listA)
    if(!listB.contains(i)) listB.add(i);
for(int j : listB)
    if(!listA.contains(j)) listB.remove(j);

否则

Arrays.sort(listA); Arrays.sort(listB);
for(int i = 0; i < listA.length(); i++)
{
   if(!listB.contains(listA.get(i))) listB.add(listA.get(i));
   if(!listA.contains(listB.get(i))) listB.remove(listA.get(i));
}

答案 2 :(得分:0)

编写代码的简单步骤

首先执行删除

   Iterate ListB
    For each element in ListB, check if it is present in List A
      If Not, delete from ListB
      else continue
 Close your loops

然后加法

Iterate ListA
  For each element in ListA, check if it is present in List B
    If Not, add to ListB
    else continue
Close your loops

示例代码:

    List<Integer> listA = ..
    List<Integer> listB = ..

    for(Integer intB: listB)
      if(!listA.contains(intB)){
         listB.remove(intB);
      }
    }   

   for(Integer intA: listA)
      if(!listB.contains(intA)){
         listB.add(intA);
      }
    }