包含重复值的哈希集;还有 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
不会覆盖 equals
和 hashCode
方法。这导致 HashSet
和 ArrayList
使用 Object
对它们的实现,该实现按身份进行比较。由于您正在比较不同的对象,因此它们是不同的。
请使用 String 而不是存储 StringBuilder 对象,或者如果您想存储自定义对象,请在尝试添加和搜索该对象时覆盖 hashcode 和 equals 方法。
请阅读 hascode 和 equals 方法的概念,您可以在网上找到很多示例。
我做了一个StringBuilder的Hashset。
下面的代码 returns "true" 即使 StringBuilder 存在于哈希集中:
if(!contains(sb_obj))
{
...
}
我也做了一个StringBuilder的ArrayList。
下面的代码 returns "-1" 即使 ArrayList 包含 obj:
if(arr.indexOf(obj)==-1)
{
....
}
为什么会有这样的行为?
我假设您正在比较具有相同 String
值的不同 StringBuilder
对象。
StringBuilder
不会覆盖 equals
和 hashCode
方法。这导致 HashSet
和 ArrayList
使用 Object
对它们的实现,该实现按身份进行比较。由于您正在比较不同的对象,因此它们是不同的。
请使用 String 而不是存储 StringBuilder 对象,或者如果您想存储自定义对象,请在尝试添加和搜索该对象时覆盖 hashcode 和 equals 方法。
请阅读 hascode 和 equals 方法的概念,您可以在网上找到很多示例。