You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java:如何判断嵌套列表与普通列表是否完全互斥?代码问题排查

问题描述

我需要判断一个普通列表和嵌套列表中的子列表是否“完全互斥”——只有当两个列表的所有元素都完全相同时才判定为不互斥(输出false),而不是只要有一个元素相同就输出false。

当前使用Collections.disjoint()的代码输出结果:
false true false
我期望的输出结果:
true true false

当前代码如下:

ArrayList<String> properties = new ArrayList<>(Arrays.asList("A", "B"));
ArrayList<ArrayList<String>> pairs = new ArrayList<ArrayList<String>>();

pairs.add(new ArrayList<>(Arrays.asList("A", "C")));
pairs.add(new ArrayList<>(Arrays.asList("D", "C")));
pairs.add(new ArrayList<>(Arrays.asList("A", "B")));

for(int i = 0; i< pairs.size(); i++) {
    System.out.println(Collections.disjoint(properties, pairs.get(i)));
} 
解决方案

Collections.disjoint()的逻辑是只要存在任意一个共同元素就返回false,这和你的需求完全不符。你需要的是:仅当两个列表完全相等时返回false,其余情况返回true。

直接修改循环内的判断逻辑,利用List.equals()方法严格比较两个列表的元素(数量、顺序、值完全一致才返回true),再对结果取反即可:

ArrayList<String> properties = new ArrayList<>(Arrays.asList("A", "B"));
ArrayList<ArrayList<String>> pairs = new ArrayList<ArrayList<String>>();

pairs.add(new ArrayList<>(Arrays.asList("A", "C")));
pairs.add(new ArrayList<>(Arrays.asList("D", "C")));
pairs.add(new ArrayList<>(Arrays.asList("A", "B")));

for(int i = 0; i< pairs.size(); i++) {
    // 仅当两个列表完全相同时输出false,其余情况输出true
    System.out.println(!properties.equals(pairs.get(i)));
} 

运行这段代码后,输出结果就是你期望的:true true false

内容的提问来源于stack exchange,提问作者Michal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:01:00