java - HashSet和HashMap之间的区别?
除了HashSet不允许重复的是,HashMap和HashSet之间的区别是什么?
我的意思是实施明智? 它有点模糊,因为它们都使用哈希表来存储值。
21个解决方案
279 votes
HashSet是一组,例如{1,2,3,4,5}
HashMap是一个关键 - > 值(键值)映射,例如 {a - > 1,b - > 2,c - > 2,d - >1}
请注意,在上面的示例中,HashMap中不能有重复的键,但它可能具有重复的值。
在HashSet中,必须没有重复的元素。
b.roth answered 2019-05-20T00:51:32Z
128 votes
它们是完全不同的结构。 Collection是Set的实现。映射将键映射到值。 使用哈希进行关键查找。
另一方面,Collection是Set的实现.Set被设计为匹配集合的数学模型。 正如您所指出的,HashSet确实使用HashMap来支持其实现。 但是,它实现了完全不同的界面。
当您正在寻找最适合您的Collection时,本教程是一个很好的起点。 如果你真的想知道发生了什么,那也有一本书。
justkt answered 2019-05-20T00:50:47Z
50 votes
HashSet的
HashSet类实现Set接口
在HashSet中,我们存储对象(元素或值)例如 如果我们有一个字符串元素的HashSet,那么它可以描绘一个HashSet元素集:{“Hello”,“Hi”,“Bye”,“Run”}
HashSet不允许表示您的重复元素无法在HashSet中存储重复值。
HashSet允许具有单个空值。
HashSet未同步,这意味着除非明确同步,否则它们不适合线程安全操作。[相似性]
add contains next notes
HashSet O(1) O(1) O(h/n) h is the table
HashMap中
HashMap类实现了Map接口
HashMap是用于存储密钥和 价值对。 简而言之,它维持着密钥和&的映射 value(HashMap类大致相当于Hashtable,除了它是不同步的并允许空值。)这如果它具有整数键,你可以如何表示HashMap元素和String类型的值:例如 {1->“Hello”,2->“Hi”,3->“Bye”,4->”中运行”}
HashMap不允许重复键,但允许重复值。
HashMap允许单个null键和任意数量的空值。
HashMap未同步,这意味着除非明确同步,否则它们不适合线程安全操作。[相似性]
get containsKey next Notes
HashMap O(1) O(1) O(h/n) h is the table
请参阅此文章以查找更多信息。
Avanish Kumar answered 2019-05-20T00:53:20Z
32 votes
他们的名字都以Hash开头真是太遗憾了。 这是他们中最不重要的部分。 正如其他人所指出的那样,重要的部分来自哈希 - 集合和地图。 它们分别是Set - 无序集合 - 和Map - 具有键控访问权限的集合。 它们恰好用哈希实现 - 这就是名字的来源 - 但它们的本质隐藏在它们名称的那一部分之后。
不要被他们的名字搞糊涂; 他们是完全不同的东西。
Carl Manaster answered 2019-05-20T00:53:53Z
3 votes
HashSet允许我们在集合中存储对象,HashMap允许我们根据键和值存储对象。 每个对象或存储的对象都有密钥。
Spidfire answered 2019-05-20T00:54:18Z
2 votes
顾名思义,HashMap是一个关联Map(从键到值的映射),HashSet只是一个Set。
leonbloy answered 2019-05-20T00:54:45Z
2 votes
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中。
3)HashSet只允许一个空键,但HashMap可以允许一个空键+多个空值。
这完全取决于Java中HashSet和HashMap的区别。 总之,HashSet和HashMap是两种不同类型的Collection,一种是Set,另一种是Map。
Piqué answered 2019-05-20T00:55:38Z
1 votes
HashSet是添加,获取,删除......由任何类型的自定义键索引的对象。
HashSet是通过比较它们的哈希值来添加元素,删除元素并检查元素是否存在。
因此,HashMap包含元素,HashSet会记住它们的哈希值。
Martijn Courteaux answered 2019-05-20T00:56:17Z
1 votes
区别:关于等级:HashSet实现了Set。HashMap实现Map并存储键和值的映射。
在数据库中使用HashSet和HashMap可以帮助您理解每个数据库的重要性。
HashSet:通常用于存储唯一的集合对象。例如:它可以用作实现类,用于存储多对一关系
class Item和Class Bid where(Item有很多Bids)HashMap:用于将键映射到value。值可以为null或Object的任何Object / list(它本身就是对象)。
frictionlesspulley answered 2019-05-20T00:57:03Z
1 votes
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中。
3)HashSet只允许一个空键,但HashMap可以允许一个空键+多个空值。
这完全取决于Java中HashSet和HashMap的区别。 总之,HashSet和HashMap是两种不同类型的Collection,一种是Set,另一种是Map。
Vibha Sanskrityayan answered 2019-05-20T00:57:44Z
1 votes
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。
user3539704 answered 2019-05-20T00:58:25Z
1 votes
HashSet内部实现HashMap.如果看到内部实现,则插入HashSet中的值将作为键存储在HashMap中,并且值是Object类的Dummy对象。
HashMap与HashSet之间的区别是: -
HashSet包含键值对,每个值都可以通过键访问,因为HashSet每次都需要迭代,因为没有get方法。
HashSet实现Map接口,允许一个空值作为键,多个空值作为值。如HashMap实现Set接口,只允许一个空值而不重复值。(在HashMap键中允许记住一个空键,因此一个空值 在HashSet中作为HashSet在内部实现HashMap)。
HashSet和HashMap在迭代时不保持插入顺序。
Abhay S answered 2019-05-20T00:59:20Z
0 votes
HashSet是根据HashMap实现的。 它是键和PRESENT对象之间的映射。
Matthew Flaschen answered 2019-05-20T00:59:46Z
0 votes
HashSet在内部使用HashMap来存储其条目。 内部HashMap中的每个条目都由一个Object键入,因此所有条目都散列到同一个桶中。 我不记得内部HashMap用来存储其值的内容,但它并不重要,因为内部容器永远不会包含重复值。
编辑:为了解决马修的评论,他是对的; 我倒退了。 内部HashMap使用构成Set元素的Objects来键入。 HashMap的值是一个只是简单地存储在HashMap桶中的Object。
Andy Gherna answered 2019-05-20T01:00:20Z
0 votes
HashSet的
HashSet是Set Interface的实现,它不允许重复值默认情况下Collection Framework中的所有方法也都在Set Interface中,但是当我们讨论Hash set时,主要的东西是将要存储在HashSet中的对象必须覆盖 equals()和hashCode()方法,以便我们可以检查相等性,并且没有重复值存储在我们的set中。如果我们创建了自己的对象,我们需要以这样的方式实现hashCode()和equal() 能够在存储集合时正确地比较对象,以便不存储重复的对象,如果我们没有覆盖此方法,则对象将采用此方法的默认实现。
方法:public boolean add(Object o)方法用于在集合中添加元素,如果在HashSet的情况下它是重复值,则返回false,否则如果成功添加则返回true。
HashMap中
HashMap是Map接口的一个实现,它将一个键映射到value.Duplicate键不允许在map.Basically map接口有两个实现类HashMap和TreeMap主要的区别是TreeMap维护对象的顺序但是HashMap不会.HashMap 允许空值和空键.HashMap不是同步的,但是集合框架提供了方法,这样我们就可以在多个线程访问我们的hashmap并且一个线程在结构上改变我们的map时使它们同步。
方法public Object put(Object Key,Object value)方法用于在map中添加元素。
Ramkailash answered 2019-05-20T01:01:11Z
0 votes
HashSet是Set实现,允许重复值但不重复键。对于添加对象,需要键/值对。 允许空值和空值。 例如:
{The-→3,世界 - →5,是 - →2,nice-→4}
HashSet是一个Set实现,它不允许重复。如果你试图添加一个重复的对象,调用public boolean add(Object o)方法,那么该集保持不变并返回false。例如:
[在,世界,是,好]
Meenakshi Pant answered 2019-05-20T01:01:59Z
-1 votes
你几乎回答了自己的问题 - hashset不允许重复值。 使用支持hashmap构建一个hashset(并且只是检查该值是否已经存在)将是微不足道的。 我想各种java实现要么这样做,要么实现一些自定义代码来更有效地执行它。
oedo answered 2019-05-20T01:02:26Z
-1 votes
基本上在HashMap中,用户必须同时提供Key和Value,而在HashSet中只提供Value,Key通过使用hash函数自动从Value派生。 因此,在拥有Key和Value之后,HashSet可以在内部存储为HashMap。
Munish Goyal answered 2019-05-20T01:02:55Z
-1 votes
HashSet和HashMap都是存储对,区别在于在HashMap中你可以在HashSet中指定一个键,键来自对象的哈希码
prateeksarda answered 2019-05-20T01:03:23Z
-1 votes
Hashtables允许一个空键和空值。 它们不同步,从而提高了效率。 如果需要,可以使用Collections.SynchronizedMap()使它们同步
Hashtables不允许空键并进行同步。
Appesh answered 2019-05-20T01:03:58Z
-2 votes
HashMap是Map接口的一个实现HashSet是Set Interface的一个实现
HashMap以键值对的形式存储数据HashSet仅存储对象
Put方法用于在map中添加元素Add方法用于添加元素是Set
在哈希映射中,使用密钥对象计算哈希码值这里的成员对象用于计算哈希码值,对于两个对象,哈希码值可以相同,因此如果返回false则表示两个对象不同,则使用equal()方法检查相等性。
HashMap比hashset更快,因为唯一键用于访问对象HashSet比Hashmap慢
Hengameh answered 2019-05-20T01:04:52Z