我想比较两个列表(一个是嵌套的)的互斥性。问题是,即使它们只有一个共同的元素,这个代码也打印false。我需要它打印false,如果它们有两个共同的元素。
我得到的输出: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)));
}
2条答案
按热度按时间zbq4xfa01#
所以,在你编辑之后,我现在理解你的问题,你把它弄得太难了。如果你只是寻找 * 不相等 * 的列表,这里没有必要使用
Collections.disjoint()
。如果你想在遇到内容相同的列表时打印false
,为什么不简单地使用equals()
呢?所以支票变成了
打印以下输出
eufgjt7s2#
第一个月
我想比较两个列表(一个是嵌套的)的互斥性。问题是这段代码打印
false
,即使它们只有一个共同的元素。我需要它打印false
,如果它们有两个共同的元素。如果你想确保两个大小相等的List包含相同的元素而不管它们的顺序,那么你可以使用
Collection.containsAll()
方法。注意
List
接口的所有实现的equals
方法仅在两个列表包含相同顺序的相同元素时才返回true
(如果您不希望考虑顺序,则equals
不适合此任务)。containsAll()
方法的列表大小适中时,使用containsAll()
才是合理的。在这种情况下,完全可以接受,因为列表中只有2
元素。否则,基于properties
列表创建一个HashSet
将是性能明智的(如果所有元素都是唯一的),并针对该集合执行检查(如果列表中可能存在重复项,则可以生成HashMap
的元素频率)。