gpt4 book ai didi

java - HashSet中加入WrappedString和String的区别

转载 作者:行者123 更新时间:2023-11-29 07:59:24 25 4
gpt4 key购买 nike

请帮助我识别像这样将 WrappedString 添加到 hashSet 之间的区别:

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");
hs.add(ws1); hs.add(ws2);
System.out.println(hs.size()); // outputs 2

}

}

以及以下内容:

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>();
String s1 = new String("aardvark");
String s2 = new String("aardvark");
hs.add(s1); hs.add(s2);
System.out.println(hs.size()); // outputs 1
}

}

我知道任何对象在 hashSet 中只存在一次,WrappedString 类型的两个实例被认为是不同的变量,尽管它们具有相同的值,但为什么它以不同的方式对待 String 类型的两个实例(尽管它们是两个不同的对象,但只存储一个实例)?

最佳答案

主要区别是 String 实现了 equals 而你的 WrappedString 没有。因此,从 HashSet 的角度来看,您可以根据需要添加任意数量的 new String("aardvark"),它们都将被视为相同(因为 new String("aardvark").equals (new String("aardvark")) 为真)并且只会添加一个。

而两个不同的 WrappedString 实例将不相等,即使它们包含的字符串相等(因为 new WrappedString("aardvark").equals(new WrappedString("aardvark") ) 为 false),因此集合不会将它们视为重复项。

如果你想要一个类似于String的行为,你需要在你的WrappedString中实现equalshashcode类。

关于java - HashSet中加入WrappedString和String的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15409606/

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