[英]Why does HashSet implementation in Sun Java use HashMap as its backing?
[英]Why does a HashSet in Java need to be iterated?
我了解在Java中,HashMap类实现Map接口,而HashSet类实现Set接口。
我也明白这两个类都是哈希表的实现。
就是说,为什么在HashMap具有get()方法时有必要遍历HashSet? 散列表是否能够通过与之关联的值来获取元素的意义不在于此?
我查了一下文档,做了一些搜索,找不到答案。
先感谢您。
HashSet
(或任何Set
实现)的get()
方法将是多余的,因为如果set.contains(x)
返回true
,则您已经具有对实例的引用( x
),该实例被视为等于Set
的相应元素。
在Map
界面中,您需要map.get(key)
来获取与键关联的值。 在Set
界面中,只有键,没有与之关联的(有意义的)值。
我也明白这两个类都是哈希表的实现。
如果通过该语句表示HashSet
是通过支持HashMap
实例实现的,那么这只是实现细节。 与此后备HashMap
的键相对应的值都是对同一个伪对象的引用。 没有理由调用HashMap
get()
。
我也明白这两个类都是哈希表的实现。
我认为您对实现的假设过多。 与所有对象一样,关键是设计师选择向您公开的公共接口。
Set
接口不包含直接访问单个对象的get方法。 语义在设计上不同于Map
。
我认为没有get方法,因为hashset在内部由hashMap支持,并且您的所有set值实际上都存储为此HashMap的键,而值只是一个称为“ PRESENT”的常量字段。 因此,如果您有一个get()它将引起问题。
请参考下面的链接以获取更多详细信息http://www.java67.com/2014/01/how-hashset-is-implemented-or-works-internally-java.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.