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

该程序打印为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

这与泛型不支持基本类型这一事实有关。

如果将sublistsuplist声明为HashSet<Integer>,则编译器会告诉您该错误。

最重要的是,您在suplist调用中以错误的方式获取了sublistcontainsAll()

预期的工作如下:
    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[]

09-30 14:59
查看更多