首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HashSet<String> .contains()

HashSet<String> .contains()
EN

Stack Overflow用户
提问于 2012-02-23 12:23:40
回答 1查看 6.5K关注 0票数 0

我在使用.contains检查字符串是否存储在HashSet中时遇到了问题。

代码语言:javascript
复制
import java.util.HashSet;

public class Controller
{
    private Queue<String> queue;
    private HashSet<String> blocked;

    public Controller()
    {
        queue = new Queue<String>();
        blocked = new HashSet<String>();
    }

    public void add(String item)
    {        
        if (!(blocked.contains(item))) queue.add(item);
    }
}

我看了看周围,知道我需要重写.equals方法。这是否意味着我必须创建一个扩展HashSet的新类,然后声明这个新类的一个实例来代替“HashSet blocked;”?

我知道简单地使用==比较两个字符串不起作用的原因,但我感到困惑,因为下面的代码似乎在某些情况下确实有效,但不是所有情况下都有效。

任何建议都将不胜感激!

问候

EN

回答 1

Stack Overflow用户

发布于 2012-02-23 12:27:08

您不需要覆盖equals方法- String已经有一对非常好的hashCode/equals,它们在CPU周期和将不同的字符串分配到不同的散列存储桶方面是有效的。

为了确保容器的正确工作,放置在散列集中的项需要两个hashCode/equals方法:hashCode决定放置对象的散列“桶”,equals解决具有相同散列码的不相等对象之间的冲突。

维基百科上有一个关于哈希表的图解article。通读它可以提高您对hashCode/equals概念的理解,它们是在任何语言中使用未排序关联容器的基础。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9407135

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档