问题
除了HashSet
不允许重复的事实之外,HashMap
和Hashset
有什么区别?
我的意思是实施明智?它有点模糊,因为它们都使用表格存储值。
#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 赞)
它们是完全不同的结构。 AHashMap
是Map
的实现。 AMap映射值的键。使用哈希进行关键查找。
另一方面,aHashSet
是Set
的实现。 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以获取更多信息。