我已经制作了一个StringBuilder的Hashset。
以下代码返回" true"即使在Hashset中存在StringBuilder:
if(!contains(sb_obj))
{
...
}
我还制作了一个StringBuilder的ArrayList。
以下代码返回" -1"即使ArrayList包含obj:
if(arr.indexOf(obj)==-1)
{
....
}
为什么会出现这种行为?
答案 0 :(得分:0)
我假设您正在比较具有相同StringBuilder
值的不同String
个对象。
StringBuilder
不会覆盖equals
和hashCode
方法。这会导致HashSet
和ArrayList
使用Object
的实现,并按身份进行比较。由于您正在比较不同的对象,因此它们是不同的。
答案 1 :(得分:0)
请使用String而不是存储StringBuilder对象,或者如果要在添加和搜索该对象时存储自定义对象覆盖哈希码和等于方法。
请阅读hascode和equals方法的概念,你可以通过互联网找到很多例子。