给定列表时,Java containsAll 不返回 true

标签 java contains subset hashset

我想检查一个数组是另一个数组的子集。

程序打印 false,但我期望是 true。为什么 containsAll 不返回 true?

int[] subset;
subset = new int[3];
subset[0]=10;
subset[1]=20;
subset[2]=30;

int[] superset;
superset = new int[5];
superset[0]=10;
superset[1]=20;
superset[2]=30;
superset[3]=40;
superset[4]=60;
HashSet sublist = new HashSet(Arrays.asList(subset));
HashSet suplist = new HashSet(Arrays.asList(superset));
boolean isSubset = sublist.containsAll(Arrays.asList(suplist));
System.out.println(isSubset);

最佳答案

有一个微妙的错误:

new HashSet(Arrays.asList(subset));

上面的行没有如您预期的那样创建一组整数。相反,它创建了一个 HashSet<int[]>对于单个元素,subset数组。

这与泛型不支持原始类型这一事实有关。

如果你声明 sublist,你的编译器会告诉你这个错误和 suplist作为HashSet<Integer> .

最重要的是,你得到了 suplistsublist错误的方式在containsAll()打电话。

以下按预期工作:

    Integer[] subset = new Integer[]{10, 20, 30};
    Integer[] superset = new Integer[]{10, 20, 30, 40, 60};
    HashSet<Integer> sublist = new HashSet<Integer>(Arrays.asList(subset));
    HashSet<Integer> suplist = new HashSet<Integer>(Arrays.asList(superset));
    boolean isSubset = suplist.containsAll(sublist);
    System.out.println(isSubset);

一个关键的变化是这是使用 Integer[]代替 int[] .

关于给定列表时,Java containsAll 不返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15664396/

相关文章:

java - 如何插入当前行

java - 如何使用连接池正确实现Hibernate连接工厂

objective-c - NSNumbers 的 NSSet - 成员方法始终为 nil

r - 如何从 data.frame 中提取单个列作为 data.frame?

r - 在 R 中绘制分位数

java - JSON对象 : Why JSONObject changing the order of attributes

java - 线程中出现异常 "main"java.lang.NoSuchMethodError : org. junit.platform.commons.util.ReflectionUtils.getDefaultClassLoader()Ljava/lang/ClassLoader;

java - 找出对象列表是否包含具有指定字段值的内容?

python - python 列表的两个 "contains"操作之间的区别

R 通过部分匹配的行名进行子集化