除了HashSet不允许重复值之外,HashMap和HashSet之间还有什么区别呢?

我是说执行方面?这有点模糊,因为两者都使用哈希表来存储值。


当前回答

HashSet在内部使用HashMap来存储它的条目。内部HashMap中的每个条目都由一个Object进行键控,因此所有条目都散列到同一个bucket中。我不记得内部HashMap使用什么来存储它的值,但这并不重要,因为内部容器永远不会包含重复的值。

编辑:针对马修的评论,他是对的;我想反了。内部HashMap由组成Set元素的对象作为键。HashMap的值是一个简单地存储在HashMap桶中的对象。

其他回答

HashSet是根据HashMap实现的。它是键和PRESENT对象之间的映射。

编辑-这个答案不正确。我把它放在这里,以防其他人有类似的想法。B.roth和justkt的答案正确。

——原创——

您基本上回答了自己的问题——hashset不允许重复值。使用支持哈希映射构建哈希集是很简单的(只是检查一下该值是否已经存在)。我想各种Java实现要么做到这一点,要么实现一些自定义代码来更有效地做到这一点。

HashMap是Map接口的实现 HashSet是Set Interface的一个实现

以键值对的形式存储数据 HashSet只存储对象

Put方法用于在map中添加元素 Add方法用于将元素添加为Set

在哈希映射中,哈希码值使用键对象计算 这里成员对象用于计算hashcode值,这可以是相同的两个对象,因此equal()方法用于检查是否相等,如果返回false,这意味着两个对象是不同的。

HashMap比hashset快,因为使用唯一键访问对象 HashSet比Hashmap慢

HashSet在内部使用HashMap来存储它的条目。内部HashMap中的每个条目都由一个Object进行键控,因此所有条目都散列到同一个bucket中。我不记得内部HashMap使用什么来存储它的值,但这并不重要,因为内部容器永远不会包含重复的值。

编辑:针对马修的评论,他是对的;我想反了。内部HashMap由组成Set元素的对象作为键。HashMap的值是一个简单地存储在HashMap桶中的对象。

HashMap是一个Map实现,允许重复的值,但不允许重复的键。添加对象需要一个键/值对。允许使用空键和空值。例如:

{,世界- > 5 - > 3 - > 2,好- > 4}

HashSet是一个Set实现,它不允许重复。如果您试图添加一个重复的对象,调用公共布尔add(object o)方法,则该集合保持不变并返回false。例如:

(,世界,好)