除了HashSet
不允许重复值之外,HashMap
和HashSet
之间有什么区别?
我的意思是实施明智吗?它有点模糊,因为它们都使用哈希表来存储值。
答案 0 :(得分:285)
HashSet是集,例如的 {1,2,3,4,5} 强>
HashMap是键 - >值(键值)映射,例如 {a - > 1,b - > 2,c - > 2,d - > 1} 强>
请注意,在上面的示例中,HashMap中不能有重复的键,但它可能有重复的值。
在HashSet中,必须没有重复的元素。
答案 1 :(得分:137)
它们是完全不同的结构。 HashMap
是Map
的实现。 Map将键映射到值。使用散列进行关键查找。
另一方面,HashSet
是Set
的实现。 Set旨在匹配集合的数学模型。正如您所指出的,HashSet
确实使用HashMap
来支持其实施。但是,它实现了一个完全不同的界面。
如果您正在为自己的目的寻找最佳Collection
,那么Tutorial就是一个很好的起点。如果你真的想知道发生了什么,there's a book for that也是如此。
答案 2 :(得分:57)
HashSet未同步,这意味着除非明确同步,否则它们不适合线程安全操作。[相似]
add contains next notes
HashSet O(1) O(1) O(h/n) h is the table
HashMap未同步,这意味着除非明确同步,否则它们不适合线程安全操作。[相似]
get containsKey next Notes
HashMap O(1) O(1) O(h/n) h is the table
请参阅this article以了解更多信息。
答案 3 :(得分:34)
他们的名字都以哈希开头真是太遗憾了。这是他们中最不重要的部分。其他人指出,重要的部分来自哈希 - 设置和地图。它们分别是 Set - 无序集合 - 以及 Map - 具有键控访问权限的集合。它们碰巧是用哈希实现的 - 这就是名字的来源 - 但它们的本质隐藏在它们名称的后面。
不要被他们的名字搞糊涂;他们是完全不同的东西。
答案 4 :(得分:3)
HashSet允许我们在集合中存储对象,而HashMap允许我们根据键和值存储对象。每个对象或存储的对象都有密钥。
答案 5 :(得分:2)
顾名思义, HashMap 是关联的 Map (从键映射到值), HashSet 只是一个设置强>
答案 6 :(得分:2)
Hashset
内部实施HashMap
。如果您看到内部implementation,则在HashSet中插入的值将作为键存储在HashMap中,并且该值是Object类的Dummy对象。
HashMap与HashSet之间的区别是: -
HashMap
包含键值对,每个值都可以通过键访问,因为HashSet每次都需要迭代,因为没有get方法。HashMap
实现了Map接口,允许一个空值作为键,多个空值作为值。当HashSet
实现Set接口时,只允许一个空值而不重复值。(记住一个HashMap中允许使用null键,因此HashSet中的一个空值作为HashSet在内部实现HashMap)。 HashSet
和HashMap
在迭代时不会保持插入顺序。答案 7 :(得分:1)
HashMap
是添加,获取,删除...由任意类型的自定义键索引的对象。
HashSet
是添加元素,删除元素并通过比较其哈希值来检查元素是否存在。
因此HashMap包含元素,而HashSet会记住它们的哈希值。
答案 8 :(得分:1)
的差异: 关于heirarchy: HashSet实现了Set。 HashMap实现Map并存储键和值的映射。
对数据库使用HashSet和HashMap可以帮助您理解每个数据库的重要性。
HashSet:通常用于存储唯一的集合对象。
例如:它可以用作实现类,用于存储
之间的多对一关系
类项目和类别出价(项目有多个出价)
HashMap:用于将键映射到value。值可以为null或Object的任何Object /列表(对象本身)。
答案 9 :(得分:1)
Java中的HashSet和HashMap之间的差异
1) HashMap和HashSet之间的第一个也是最显着的区别是HashMap是Map接口的实现,而HashSet是Set接口的实现,这意味着HashMap是一个基于键值的数据结构和HashSet通过不允许重复来保证唯一性。实际上HashSet是Java中HashMap的包装器,如果你看一下HashSet.java的add(E e)方法的代码,你会看到下面的代码:
public boolean add(E e)
{
return map.put(e, PRESENT)==null;
}
其中将对象放入map作为键和值是最终对象PRESENT,它是虚拟的。
2) HashMap和HashSet的第二个区别在于,我们使用add()方法将元素放入Set中,但我们使用put()方法将键和值插入到Java中的HashMap中。 / p>
3) HashSet只允许一个空键,但HashMap可以允许一个空键+多个空值。
这完全取决于Java中HashSet和HashMap的区别。总之,HashSet和HashMap是两种不同类型的Collection,一种是Set,另一种是Map。
答案 10 :(得分:1)
Java中HashSet和HashMap之间的差异
HashSet在内部使用HashMap来存储对象。当add(String)方法调用它时,调用HahsMap put(key,value)方法,其中key = String object& value = new Object(Dummy)。因此它不会重复,因为键只是值对象。
在Hashset / HashMap中作为键存储的对象应该覆盖hashcode&等于合同。
用于在HashMap中访问/存储值对象的键应声明为Final,因为当它被修改时,无法定位Value对象&返回null。
答案 11 :(得分:0)
HashSet在内部使用HashMap来存储其条目。内部HashMap中的每个条目都由一个Object键入,因此所有条目都散列到同一个桶中。我不记得内部HashMap用于存储其值的内容,但它并不重要,因为内部容器永远不会包含重复值。
编辑:为了解决马修的评论,他是对的;我倒退了。内部HashMap使用构成Set元素的Objects 键入。 HashMap的值是一个只是简单地存储在HashMap桶中的Object。
答案 12 :(得分:0)
答案 13 :(得分:0)
HashMap
是Map
实施,允许重复值,但不重复密钥。。要添加对象,需要键/值对。允许空值和空值。例如:
{The-→3,世界 - →5,是 - →2,nice-→4}
HashSet
是Set
实现,不允许重复。如果您尝试添加重复对象,调用public boolean add(Object o)
方法,则该集保持不变并返回false
。例如:
[在,世界,是,漂亮]
答案 14 :(得分:-1)
基本上在HashMap中,用户必须提供Key和Value,而在HashSet中只提供Value,Key是通过使用hash函数自动从Value派生的。因此,在拥有Key和Value之后,HashSet可以在内部存储为HashMap。
答案 15 :(得分:-1)
您可以发现它们之间的主要区别如下:
哈希集
HashMap
答案 16 :(得分:-1)
HashMaps
允许一个空键和空值。它们不同步,从而提高了效率。如果需要,您可以使用Collections.SynchronizedMap()
Hashtables
不允许空键并且已同步。
答案 17 :(得分:-1)
HashSet和HashMap都是存储对,不同之处在于,在HashMap中你可以在HashSet中指定一个键,键来自对象的哈希码
答案 18 :(得分:-1)
你几乎回答了自己的问题 - hashset不允许重复值。使用支持hashmap构建一个hashset(并且只是检查该值是否已经存在)将是微不足道的。我想各种java实现要么这样做,要么实现一些自定义代码来更有效地执行它。
答案 19 :(得分:-2)
HashMap是Map接口的一个实现 HashSet是Set Interface
的实现HashMap以键值对的形式存储数据 HashSet仅存储对象
Put方法用于在地图中添加元素 Add方法用于添加元素是Set
在哈希映射中,哈希码值使用密钥对象计算 这里的成员对象用于计算哈希码值,对于两个对象,哈希码值可以相同,因此如果返回false,则使用equal()方法检查相等性,这意味着两个对象不同。
HashMap比hashset更快,因为使用唯一键来访问对象 HashSet比Hashmap
慢