【发布时间】:2016-06-04 16:31:15
【问题描述】:
我正在研究 hashmaps 。它不允许重复,但在这个程序中它添加了三个项目,据我说它应该只添加一个 bcz 其余部分相同。
import java.util.*;
public class WrappedString {
private String s;
public WrappedString(String s) { this.s = s; }
public static void main(String[] args) {
HashSet<Object> hs = new HashSet<Object>();
WrappedString ws1 = new WrappedString("aardvark");
WrappedString ws2 = new WrappedString("aardvark");
String s1 = new String("aardvark");
String s2 = new String("aardvark");
System.out.println(hs.add(ws1)); //true
System.out.println(hs.add(ws2)); ////true
System.out.println(hs.add(s1)); //true
System.out.println(hs.add(s2)); //false
System.out.println(hs.size());//3 } }
【问题讨论】:
-
这个类
WrappedString是什么? HashSet 依赖于equals()方法来避免重复。如果您的课程没有覆盖它,那么您可能会得到不可预知的结果 -
@zencv 没有必要覆盖 equals() 方法,因为它已经可用于所有类,因为该方法是在 Object() 类中定义的
-
@DishaJain Exactly Object 实现 equals 并且它确定这两个对象不相等。
-
@DishaJain:Object 中 equals 的默认实现不比较逻辑相等,而只比较对象标识。如果这是您想要的,那很好 - 任何依赖于 equals 的 Set 实现都会将它们视为不同的对象。如果您希望将两个不同的对象视为相同,则提供您自己的equals和hashCode实现
标签: collections hashset