Hashset包含重复值; ArrayList indexOf(string_present_in_list)返回-1

时间:2017-08-10 16:03:59

标签: java arraylist contains hashset indexof

我已经制作了一个StringBuilder的Hashset。

以下代码返回" true"即使在Hashset中存在StringBuilder:

if(!contains(sb_obj))
{
...
}

我还制作了一个StringBuilder的ArrayList。

以下代码返回" -1"即使ArrayList包含obj:

if(arr.indexOf(obj)==-1)
{
....
}

为什么会出现这种行为?

2 个答案:

答案 0 :(得分:0)

我假设您正在比较具有相同StringBuilder值的不同String个对象。

StringBuilder不会覆盖equalshashCode方法。这会导致HashSetArrayList使用Object的实现,并按身份进行比较。由于您正在比较不同的对象,因此它们是不同的。

答案 1 :(得分:0)

请使用String而不是存储StringBuilder对象,或者如果要在添加和搜索该对象时存储自定义对象覆盖哈希码和等于方法。

请阅读hascode和equals方法的概念,你可以通过互联网找到很多例子。