HashSet和HashMap的区别?
除了HashSet
不允许重复值的事实之外, HashMap
和Hashset
什么Hashset
呢?
我的意思是明智的执行 这有点含糊,因为两者都使用散列表来存储值。
它们是完全不同的结构。 HashMap
是Map
一个实现。 地图将键映射到值。 密钥查找使用散列。
另一方面, HashSet
是Set
一个实现。 一套devise是为了匹配一套math模型。 正如你所说的, HashSet
使用HashMap
来支持它的实现。 但是,它实现了完全不同的界面。
当你正在寻找什么将是最好的Collection
你的目的,这个教程是一个很好的起点。 如果你真的想知道发生了什么, 也有一本书 。
HashSet是一个集合 ,例如{1,2,3,4,5}
HashMap是一个键 – >值 (键值)映射,例如{a – > 1,b – > 2,c – > 2,d – > 1}
注意在我上面的例子中,在HashMap中不能有重复的键,但是它可能有重复的值。
在HashSet中,不能有重复的元素。
他们的名字都以Hash开头,这真是一个耻辱。 这是他们中最不重要的部分。 正如其他人所指出的那样,重要的部分来自Hash – Set和Map 。 它们分别是一个Set (一个无序的集合)和一个Map (一个具有键控访问的集合)。 他们碰巧用哈希值来实现 – 这就是名字的来源 – 但是他们的本质隐藏在他们的名字后面。
不要被他们的名字弄糊涂了; 他们是完全不同的东西。
HashSet的
- HashSet类实现了Set接口
- 在HashSet中,我们存储对象(元素或值),例如,如果我们有一个HashSet的string元素,那么它可以描述一组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用于存储键值对。 简而言之,它维护键和值的映射(HashMap类与Hashtable类大致相同,只是它是不同步的,并且允许为空值)。如果它具有整数键和stringtypes的值,则可以表示HashMap元素:例如{1 – >“Hello”,2 – >“Hi”,3 – >“Bye”,4 – >“Run”}
- HashMap不允许重复的键,但它允许有重复的值。
- HashMap允许单个空键和任意数量的空值。
-
HashMap不同步,这意味着它们不适合线程安全操作,除非明确同步。[相似性]
get containsKey next Notes HashMap O(1) O(1) O(h/n) h is the table
请参阅这篇文章,以find更多的信息。
HashSet允许我们将对象存储在HashMap允许我们根据键和值存储对象的集合中。 每个对象或存储的对象将有钥匙。
正如名字暗示的, HashMap是一个关联的Map (从一个键到一个值的映射), HashSet只是一个Set 。
HashMap
是添加,获取,删除,…由任何types的自定义键索引的对象。
HashSet
是添加元素,删除元素并通过比较它们的散列来检查元素是否存在。
所以一个HashMap包含元素,一个HashSet记住它们的散列。
差异:关于heirarchy:HashSet implements Set。 HashMap实现Map并存储键和值的映射。
HashSet和HashMap相对于数据库的使用将帮助您了解每个数据库的意义。
HashSet:通常用于存储唯一的集合对象。 例如:它可能被用作存储多对一关系的实现类
类项目和类投标在哪里(项目有很多投标) HashMap:用于映射一个键值。该值可以是null或任何对象/对象列表(本身是对象)。
Java中HashSet和HashMap的区别
HashSet在内部使用HashMap存储对象。当add(String)方法调用它时,调用HahsMap put(key,value)方法,其中key = String object&value = new Object(Dummy)。目的。
在Hashset / HashMap中作为关键字存储的对象应该覆盖hashcode&equals contract。
用于在HashMap中访问/存储值对象的键应该声明为Final,因为当它被修改时,Value对象不能被定位并返回null。
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; }
将对象放入地图中作为键和值是虚拟的最终对象PRESENT。
2)HashMap和HashSet的第二个区别在于,我们使用add()方法将元素放入Set中,但是我们使用put()方法将key和value插入到Java中的HashMap中。
3)HashSet只允许有一个空键,但HashMap可以允许一个空键+多个空值。
这就是Java中的HashSet和HashMap之间的区别。 综上所述,HashSet和HashMap是两个不同types的集合,一个是Set,另一个是Map。
HashSet是用HashMap来实现的。 这是密钥和PRESENT对象之间的映射。
你几乎回答自己的问题 – 哈希集不允许重复的值。 使用支持hashmap来构build一个hashset是很简单的(只需检查一下这个值是否已经存在)。 我猜各种Java实现要么做,要么执行一些自定义代码来更有效地做到这一点。
HashSet在内部使用HashMap来存储它的条目。 内部HashMap中的每个条目由单个对象进行键控,因此所有条目都散列到同一个存储分区中。 我不记得内部HashMap使用什么来存储它的值,但它并不重要,因为内部容器将永远不会包含重复的值。
编辑 :为了解决Matthew的评论,他是对的。 我倒退了。 内部的HashMap由组成Set元素的对象来控制 。 HashMap的值是一个只存储在HashMap桶中的对象。
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; }
将对象放入地图中作为键和值是虚拟的最终对象PRESENT。
2) HashMap和HashSet的第二个区别在于,我们使用add()方法将元素放入Set中,但是我们使用put()方法将key和value插入到Java中的HashMap中。
3) HashSet只允许有一个空键,但HashMap可以允许一个空键+多个空值。
这就是Java中的HashSet和HashMap之间的区别。 综上所述,HashSet和HashMap是两个不同types的集合,一个是Set,另一个是Map。
HashSet的
HashSet是Set接口的实现,它不允许重复值CollectionFramework中的所有方法都默认在SetInterface中,但是当我们谈论HashSet时,主要的事情是要存储在HashSet中的对象必须覆盖equals()和hashCode()方法,以便我们可以检查相等性,并且不会在我们的set中存储重复值。如果我们创build了自己的对象,我们需要以这样的方式实现hashCode()和equal能够正确比较存储在一个集合中的对象,以便重复的对象不被存储,如果我们没有重写这个方法对象将采取默认的方法实现。
方法: public boolean add(Object o)方法用于在集合中添加元素,如果是HashSet,则返回false,否则返回true。
HashMap中
HashMap是Map接口的一个实现,它将一个键映射到value中。映射中不允许有重复键。基本映射接口有两个实现类HashMap和TreeMap的主要区别是TreeMap维护对象的顺序,但是HashMap不会.HashMap允许空值和空键.HashMap不同步,但集合框架提供的方法,以便我们可以使它们同步,如果多个线程将访问我们的哈希映射和一个线程在结构上改变我们的地图。
方法 public Object put(Object Key,Object value)方法用于在地图中添加元素。
HashMap
是一个Map
实现,允许重复值但不能重复键。 。 要添加一个对象,键/值对是必需的。 空键和空值是允许的。 例如:
{The-> 3,世界 – >如图5所示,是 – > 2,nice-> 4}
HashSet
是一个Set
实现,它不允许重复 。如果试图添加一个重复的对象,调用public boolean add(Object o)
方法,那么该集合保持不变并返回false
。 例如:
[在,世界,是,好]
基本上在HashMap中,用户必须同时提供Key和Value,而在HashSet中只提供Value,Key是通过使用散列函数从Value自动派生的。 因此,在具有Key和Value之后,HashSet可以在内部存储为HashMap。
HashSet和HashMap都存储对,不同之处在于在HashMap中可以指定一个键,而在HashSet中键来自对象的哈希码
HashMaps
允许一个空键和空值。 他们不同步,这增加了效率。 如果需要,可以使用Collections.SynchronizedMap()
来使它们同步
Hashtables
不允许空键并被同步。
HashMap是Map接口的一个实现HashSet是Set Interface的一个实现
HashMap以键值对forms存储数据HashSet仅存储对象
Put方法用于在地图中添加元素添加方法用于添加元素为Set
在哈希映射中,hashcode的值是使用key对象来计算的。这里的成员对象用于计算两个对象可以相同的hashcode值,所以如果equal()方法返回false,表示两个对象是不同的。
HashMap比hashset更快,因为唯一键用于访问对象HashSet比Hashmap慢
Hashset内部实现HashMap。 如果您在http://javaconceptoftheday.com/how-hashset-works-internally-in-java/上看到内部实现,则插入到HashSet中的值将作为键存储在HashMap中,并且该值是Object类的Dummy对象。; HashMap与HashSet之间的区别在于: – 1. HashMap包含键值对,每个值都可以通过key来访问,因为没有get方法,每次都需要迭代HashSet。 2. HashSet实现了Map接口,并允许一个空值作为一个键值和多个空值作为值。在HashSet实现了Set接口的情况下,只允许有一个空值并且没有重复的值(在HashMap中允许有一个空的键值, HashSet中的空值作为HashSet在内部实现HashMap)。 3.HashSet和HashMap在迭代时不保持插入顺序。