为什么这个特殊的代码用于比较arraylists不起作用?

时间:2016-01-08 09:27:46

标签: java arraylist

我想要比较两个不同的arraylists - 特别是检查list2中是否存在list1的某个元素。

这是我的代码:

for (int i = 0; i < list1.size(); i++){
    if (list2.contains(list1.get(i))) {
        System.out.println ("match");
    }
}

基本上我循环遍历list1 - 并检查list2是否包含list1中的元素。但是,此if语句未被执行 - 并且没有值为null。

逻辑和代码对我来说似乎没问题。有什么问题?

2 个答案:

答案 0 :(得分:0)

如果您正在尝试查找两个列表之间的交集,则更好的方法是使用retainAll方法。假设您有两个列表:

List<String> list1 = asList("Martin", "Eric", "Kent");
List<String> list2 = asList("Kent", "Josh", "Eric");

以下列表将保留两者之间的交集:

List<String> intersection = new ArrayList<>(list1);
intersection.retainAll(list2);

致电retainsAll后,十字路口将只包含KentEric

答案 1 :(得分:-1)

(这真是一个评论。不幸的是,SE在评论与答案和格式化选项之间存在巧合。)

以下是测试代码的完整程序示例,但有效。为清楚起见,我在匹配上打印了一个非空字符串。我建议通过用失败的案例替换列表来修改它。如果失败,请发布完整的程序。

import java.util.Arrays;
import java.util.List;

public class Test {
  public static void main(String[] args) {
    List<String> listA = Arrays.asList(new String[] { "job" });
    List<String> listB = Arrays.asList(new String[] { "bbb", "job" });
    System.out.println("One match");
    matcher(listA, listB);
  }

  public static void matcher(List<String> list1, List<String> list2) {
    for (int i = 0; i < list1.size(); i++) {
      if (list2.contains(list1.get(i))) {
        System.out.println("Found one.");
      }
    }
  }
}