我了解在Java中,HashMap类实现Map接口,而HashSet类实现Set接口。
我还理解这两个类都是哈希表的实现。
也就是说,为什么当HashMap具有get()方法时,有必要遍历HashSet?散列表是否能够通过与之关联的值来获取元素的意义不在于此?
我已经查看了文档并做了一些搜索,但是找不到答案。
谢谢。
答案 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