Java - List的奇怪行为包含

时间:2015-06-15 12:31:19

标签: java

我遇到了一段代码,

List<String> a = new ArrayList<String>();
a.add("A");
a.add("B");
a.add("C");

List<String> b = new ArrayList<String>();
b.add("A");
b.add("B");
b.add("C");

System.out.println("a.contains(b)"+a.contains(b));

返回false,我的预期是true值。

我惊呆了,看到contains提供的java方法的这种行为。这是预期的行为,以及contains

中此List方法的用法

2 个答案:

答案 0 :(得分:6)

a.contains(b)项检查是单个元素b包含在列表a中,在您的示例中显然是错误的,因为a的所有元素都不是List

您正在寻找a.containsAll(b),它会检查Collection中是否存在b a中的所有元素。

阅读Javadoc:

/**
 * Returns <tt>true</tt> if this list contains the specified element.
 * More formally, returns <tt>true</tt> if and only if this list contains
 * at least one element <tt>e</tt> such that
 * <tt>(o==null&nbsp;?&nbsp;e==null&nbsp;:&nbsp;o.equals(e))</tt>.
 * ...
 */
boolean contains(Object o);

/**
 * Returns <tt>true</tt> if this list contains all of the elements of the
 * specified collection.
 * ...
 */
boolean containsAll(Collection<?> c);

答案 1 :(得分:1)

contains检查列表中是否存在单个元素。在检查列表是否包含另一个列表的所有元素时,您希望使用containsAll

List<String> a = new ArrayList<String>();
a.add("A"); 
a.add("B");
a.add("C"); 

List<String> b = new ArrayList<String>(); 
b.add("A"); 
b.add("B");
b.add("C");

//Both of these will print true
System.out.println("a.contains(\"B\"): " + a.contains("B"));
System.out.println("a.containsAll(b): " + a.containsAll(b));