gpt4 book ai didi

java - 我是否在 java.util.ArrayList.containsAll 中发现了错误?

转载 作者:行者123 更新时间:2023-12-01 07:40:25 25 4
gpt4 key购买 nike

在 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);

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

sats.containsAll(sats2); //Returns TRUE!

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

我在另一个 StackOverflow 问题中读到,这不是执行此类操作的最高效的方法,因此如果有人对如何提高其性能提出建议,那就太好了!

提前致谢!

最佳答案

正如 @Progman 所指出的,您可能会重写 Satellite 中的 equals 方法。

下面的程序打印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));
}
}

( ideone.com demo )

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

关于java - 我是否在 java.util.ArrayList.containsAll 中发现了错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5708445/

25 4 0