0

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

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

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

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

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

4

3 回答 3

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,则不会删除条目。

于 2012-10-16T14:00:41.417 回答
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));
}
于 2012-10-16T13:59:34.610 回答
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);
      }
    }   
于 2012-10-16T13:59:59.930 回答