hashmap hashset java_java - HashSet和HashMap之间的区别?

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值