我想检查一个数组是否是另一个数组的子集。
程序打印错误,但我期望正确。为什么 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));
上面的行确实not按照您的预期创建一组整数。相反,它创建了一个HashSet<int[]>
对于单个元素,subset
array.
这与泛型不支持原始类型有关。
如果你声明了,你的编译器会告诉你这个错误sublist
and suplist
as HashSet<Integer>
.
最重要的是,你得到了suplist
and sublist
错误的方式containsAll()
call.
以下内容按预期工作:
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[]
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)