HashSet和HashMap之间的区别?

问题

除了HashSet不允许重复的事实之外,HashMapHashset有什么区别?

我的意思是实施明智?它有点模糊,因为它们都使用表格存储值。


#1 热门回答(271 赞)

HashSet是aset,例如:{1,2,3,4,5}

HashMap是akey - > value(key to value)map,例如6**{a - > 1,b - > 2,c - > 2,d - > 1}**

请注意,在上面的示例中,HashMap中不能有重复的键,但它可能有重复的值。

在HashSet中,必须没有重复的元素。


#2 热门回答(122 赞)

它们是完全不同的结构。 AHashMapMap的实现。 AMap映射值的键。使用哈希进行关键查找。

另一方面,aHashSetSet的实现。 ASet旨在匹配集合的数学模型。正如你所指出的,AHashSet使用aHashMap来支持其实现。但是,它实现了完全不同的界面。

当你正在寻找最适合你目的的Collection时,这个Tutorial是一个很好的起点。如果你真的想知道发生了什么,there's a book for that


#3 热门回答(39 赞)

#HashSet

  • HashSet类实现Set接口
  • 在HashSet中,我们存储对象(元素或值),例如如果我们有一个字符串元素的HashSet,那么它可以描述一组HashSet元素:{"Hello","Hi","Bye","Run"}
  • HashSet不允许重复元素表示你无法在HashSet中存储重复值。
  • HashSet允许具有单个空值。
  • HashSet未同步,这意味着除非明确同步,否则它们不适合线程安全操作。[相似]添加包含下一个注释
    HashSet O(1)O(1)O(h / n)h是表

#HashMap

  • HashMap类实现Map接口
  • HashMap用于存储键和值对。简而言之,它维护键和值的映射(HashMap类大致相当于Hashtable,除了它是不同步的并且允许空值。)如果HashMap元素具有整数键和String类型的值,则可以表示HashMap元素:例如{1 - >"你好",2 - >"你好",3 - >"再见",4 - >"运行"}
  • HashMap不允许重复键,但它允许重复值。
  • HashMap允许单个null键和任意数量的空值。
  • HashMap未同步,这意味着除非明确同步,否则它们不适合线程安全操作。[相似性] get containsKey next Notes
     HashMap O(1)O(1)O(h / n)h是表

请参阅this article以获取更多信息。