给定列表时,Java containsAll不返回true
发布时间:2020-12-15 05:00:28 所属栏目:Java 来源:网络整理
导读:我想检查一个数组是另一个数组的子集. 该程序打印错误,但我希望是真的.为什么不包含所有返回的真实? 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;super
我想检查一个数组是另一个数组的子集.
该程序打印错误,但我希望是真的.为什么不包含所有返回的真实? 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 []>使用单个元素,子集数组. 这与泛型不支持基本类型的事实有关. 如果您将子列表和suplist声明为HashSet< Integer>,则编译器会告诉您有关错误的信息. 最重要的是,你在containsAll()调用中以错误的方式获得了suplist和sublist. 以下按预期工作: Integer[] subset = new Integer[]{10,20,30}; Integer[] superset = new Integer[]{10,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 []. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |