为什么需要迭代Java中的HashSet?

时间:2018-11-26 12:54:58

标签: java data-structures hashmap hashset

我了解在Java中,HashMap类实现Map接口,而HashSet类实现Set接口。

我还理解这两个类都是哈希表的实现。

也就是说,为什么当HashMap具有get()方法时,有必要遍历HashSet?散列表是否能够通过与之关联的值来获取元素的意义不在于此?

我已经查看了文档并做了一些搜索,但是找不到答案。

谢谢。

3 个答案:

答案 0 :(得分:3)

get()(或任何HashSet实现)的Set方法将是多余的,因为如果set.contains(x)返回true,则您已经有了一个引用( x)到一个实例,该实例被认为等于Set的相应元素。

Map界面中,您需要map.get(key)才能获取与键关联的值。在Set界面中,只有键,没有与之相关的(有意义的)值。

  

我还理解这两个类都是哈希表的实现。

如果通过该语句表示HashSet是通过支持的HashMap实例实现的,那么这只是实现细节。与此后勤HashMap的键相对应的值都是对同一个伪对象的引用。没有理由呼叫get()作为后盾HashMap

答案 1 :(得分:1)

  

我也了解这两个类都是a的实现   哈希表。

我认为您对实现的假设过多。与所有对象一样,关键是设计师选择向您公开的公共接口。

Set接口不包含直接访问单个对象的get方法。语义在设计上与Map不同。

答案 2 :(得分:1)

我认为没有get方法,因为hashset在内部由hashMap支持,并且您的所有set值实际上都存储为此HashMap的键,而值只是一个称为“ PRESENT”的常量字段。因此,如果您有一个get(),它将引起问题。

请参阅以下链接以获取更多详细信息 http://www.java67.com/2014/01/how-hashset-is-implemented-or-works-internally-java.html