【发布时间】:2023-03-25 12:17:01
【问题描述】:
List<String> list = Arrays.asList("Snehal", "Masne", "Anything", "Else");
HashSet<String> hashSet = new HashSet<String>(list);
TreeSet<String> treeSet = new TreeSet<String>(list);
System.out.println("Equality = " + hashSet.equals(treeSet)); // returns True
equals() 如何通过比较 diff 结构来评估结果?怎么会成真?只是比较哈希码吗?如果是,怎么会一样?
【问题讨论】:
-
"Is just Hashcode 被比较" 不。根据定义,哈希码不是也不应该用于测试相等性。哈希码在有限空间(32 位)和hash collisions are possible 内。
-
@Michael nitpick:在这种情况下,由于
HashSet是基于HashMap,hashCode 将被调用。 -
@Eugene 当然你是对的,它被称为。但仅此还不足以保证相等,任何匹配的元素散列之后都会调用
equals。抱歉,如果不清楚。 -
@Michael 正如我在回答中所说的那样......