包含重复值的哈希集;还有 ArrayList indexOf(string_present_in_list) 返回 -1

Hashset Containg duplicate values ; Also ArrayList indexOf(string_present_in_list) returning -1

我做了一个StringBuilder的Hashset。

下面的代码 returns "true" 即使 StringBuilder 存在于哈希集中:

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

我也做了一个StringBuilder的ArrayList。

下面的代码 returns "-1" 即使 ArrayList 包含 obj:

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

为什么会有这样的行为?

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

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

请使用 String 而不是存储 StringBuilder 对象,或者如果您想存储自定义对象,请在尝试添加和搜索该对象时覆盖 hashcode 和 equals 方法。

请阅读 hascode 和 equals 方法的概念,您可以在网上找到很多示例。