我在java.util.ArrayList.containsAll中发现了一个错误吗?

MCa*_*els 0 java collections list arraylist

在Java中我有两个列表:

List<Satellite> sats = new ArrayList<Satellite>();
List<Satellite> sats2 = new ArrayList<Satellite>();

Satellite sat1 = new Satellite();
Satellite sat2 = new Satellite();

sats.add(sat1);

sats2.add(sat1);
sats2.add(sat2);
Run Code Online (Sandbox Code Playgroud)

当我在第一个列表中执行以下containsAll方法时:

sats.containsAll(sats2); //Returns TRUE!
Run Code Online (Sandbox Code Playgroud)

它返回true.但是第一个List(sats)只包含1个项目,第二个列表包含2.因此,第一个列表(sats)甚至不可能包含第二个列表(sats2)中的所有项目.知道为什么或者这是Java JDK中的错误?

我在另一个StackOverflow问题中读到,这不是执行此类操作的最高效方式,所以如果有人建议如何使其更高效,那就太棒了!

提前致谢!

aio*_*obe 5

正如@Progman指出的那样,你可能会覆盖这个equals方法Satellite.

下面的程序打印false.

import java.util.*;

class Satellite {
}

class Test {
    public static void main(String[] args) {
        List<Satellite> sats = new ArrayList<Satellite>();
        List<Satellite> sats2 = new ArrayList<Satellite>();

        Satellite sat1 = new Satellite();
        Satellite sat2 = new Satellite();

        sats.add(sat1);

        sats2.add(sat1);
        sats2.add(sat2);

        System.out.println(sats.containsAll(sats2));
    }
}
Run Code Online (Sandbox Code Playgroud)

(ideone.com演示)

我建议您打印两个列表的内容,并检查内容是否符合您的预期.