加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

给定列表时,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 [].

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读