在Java中的哈希集合(Hashset)中,有一个.equals方法用于比较每个集合中的元素。
无论顺序如何,这个方法都会返回true吗?例如,假设我们有一个包含{a,b,c}元素的集合和另一个包含{b,c,a}元素的集合,如果你对这两个集合使用.equals方法,它会返回true吗?还是必须将它们排序?
这应该返回true。 文档说:
比较指定的对象和此集合以检查它们是否相等。如果给定的对象也是一个集合,两个集合具有相同的大小,并且给定集合中的每个成员都包含在此集合中,则返回true。这可以确保equals方法在Set接口的不同实现之间正常工作。
HashSet
没有顺序Java HashSet
是无序的 - 它们没有排序。因此,您的问题不能像提出的那样进行提问。例如,集合{a,b,c}
与集合{b,c,a}
相同。尽管如此,HashSet
继承了AbstractSet#equals(Object)
,它告诉我们以下内容:
将指定的对象与这个集合进行比较以检查是否相等。如果给定的对象也是一个集合,而且两个集合具有相同的大小,并且给定集合的每个成员都包含在此集合中,则返回
true
。这确保了equals
方法在Set
接口的不同实现之间正确工作。
HashSet
实现了 Set
接口(模拟数学中的集合抽象),集合中不包含任何顺序信息,因此排序在集合中没有意义。因此,在 Set
中,equals
只考虑成员而忽略成员的顺序。
是的,HashSet
是一个无序的唯一元素列表,这意味着元素的顺序对相等性没有影响。
以下是演示说明此点。
import java.util.HashSet;
public class TestHashSet
{
public static void main(String[] args)
{
HashSet<Integer> set1 = new HashSet<Integer>() {{
add(1);
add(2);
add(3);
add(4);
add(5);
}};
HashSet<Integer> set2 = new HashSet<Integer>() {{
add(3);
add(1);
add(5);
add(4);
add(2);
}};
System.out.println("set1 is equal to set2: " + set1.equals(set2));
}
}