gpt4 book ai didi

java - 如何对列表执行与顺序无关的相等性检查?

转载 作者:搜寻专家 更新时间:2023-11-01 02:10:58 26 4
gpt4 key购买 nike

我想在一个类上实现一个 equals 方法,其中实例的相等性是从所包含列表的“弱”相等性派生的,即。 e.列表元素的相同顺序不是必需的,而 java.util.List.equals(Object)(您可以在下面查看它的 javadoc)要求相同的顺序。

那么,对列表执行与顺序无关的相等性检查的最佳方法是什么?


我想将列表包装到新列表中,对它们进行排序,然后在其中执行等号。

或者另一种方法(这会使这个问题过时):改用 TreeSet,这样元素的顺序在具有相同元素的集合中总是相同的。

/**
* Compares the specified object with this list for equality. Returns
* <tt>true</tt> if and only if the specified object is also a list, both
* lists have the same size, and all corresponding pairs of elements in
* the two lists are <i>equal</i>. (Two elements <tt>e1</tt> and
* <tt>e2</tt> are <i>equal</i> if <tt>(e1==null ? e2==null :
* e1.equals(e2))</tt>.) In other words, two lists are defined to be
* equal if they contain the same elements in the same order. This
* definition ensures that the equals method works properly across
* different implementations of the <tt>List</tt> interface.
*
* @param o the object to be compared for equality with this list
* @return <tt>true</tt> if the specified object is equal to this list
*/
boolean equals(Object o);

我知道答案并关闭了标签。后来我读了一个post关于在这种情况下该怎么做的元数据。但是由于我的问题被 SO 缓存了,所以我还是要发布它。也许将来有人会遇到同样的“问题”。如果没有人发布,我将发布答案。

最佳答案

如果您不反对添加第 3 方库,您可以使用 Apache Commons-Lang 中的 CollectionUtils.isEqualCollection(java.util.Collection a, java.util.Collection b)。它本质上是比较两个任意集合(也是列表),忽略元素的顺序。

来自 API 文档:

Returns true iff the given Collections contain exactly the same elements with exactly the same cardinalities. That is, iff the cardinality of e in a is equal to the cardinality of e in b, for each element e in a or b.

关于java - 如何对列表执行与顺序无关的相等性检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18492857/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com