HashSet和HashMap的区别?

除了HashSet不允许重复值之外,HashMapHashSet之间的区别是什么?

我是说执行方面?这有点模糊,因为两者都使用哈希表来存储值。

283257 次浏览

HashSet是根据HashMap实现的。它是键和PRESENT对象之间的映射。

您基本上回答了自己的问题——hashset不允许重复值。使用支持哈希映射构建哈希集是很简单的(只是检查一下该值是否已经存在)。我想各种Java实现要么做到这一点,要么实现一些自定义代码来更有效地做到这一点。

HashSet在内部使用HashMap来存储它的条目。内部HashMap中的每个条目都由一个Object进行键控,因此所有条目都散列到同一个bucket中。我不记得内部HashMap使用什么来存储它的值,但这并不重要,因为内部容器永远不会包含重复的值。

编辑:解决马修的评论,他是对的;我想反了。内部HashMap的键值是使用组成Set元素的对象。HashMap的值是一个简单地存储在HashMap桶中的对象。

HashSet允许我们在集合中存储对象,而HashMap允许我们在键和值的基础上存储对象。每个对象或存储对象都有键。

顾名思义,HashMap是一个关联地图(从键映射到值),HashSet只是一个

它们是完全不同的结构。HashMapMap的实现。地图将键映射到值。键查找使用散列进行。

另一方面,HashSetSet的实现。被设计用来匹配集合的数学模型。正如你所注意到的,HashSet确实使用HashMap来支持它的实现。但是,它实现了一个完全不同的接口。

当你在寻找最适合你的目的的Collection时,这个教程是一个很好的起点。如果你真的想知道发生了什么,有一本书专门讲这个也是。

HashSet是一个,例如{1, 2, 3, 4, 5}

HashMap是一个Key ->值(键到值)映射,例如{a -> 1, b -> 2, c -> 2, d -> 1}

注意,在我上面的例子中,HashMap中不能有重复的键,但它可能有重复的值。

在HashSet中,必须没有重复的元素。

A HashMap是添加,获取,删除,…由任意类型的自定义键索引的对象 HashSet用于添加元素,删除元素,并通过比较它们的哈希值来检查是否存在元素

HashMap包含元素,HashSet记住它们的哈希值。

< p >差异: 关于等级制度: HashSet实现Set。 HashMap实现Map并存储键和值的映射 在数据库中使用HashSet和HashMap将帮助您理解它们的重要性。
HashSet:通常用于存储唯一的集合对象。 例如:它可以用作存储
之间的多对一关系的实现类 class Item和class Bid where (Item有多个投标) HashMap:用于将键映射到值。该值可以为null或Object的任意Object /list (Object本身就是Object)

很遗憾,它们的名字都以哈希开头。这是最不重要的部分。重要的部分在哈希之后——地图,正如其他人指出的那样。它们分别是(无序集合)和地图(键控访问集合)。它们碰巧是用散列实现的——这就是名称的来源——但它们的本质隐藏在名称的这部分后面。

不要被他们的名字弄糊涂了;它们是完全不同的东西。

基本上在HashMap中,用户必须同时提供Key和Value,而在HashSet中只提供Value, Key是通过哈希函数从Value自动派生出来的。因此,在拥有Key和Value之后,HashSet可以在内部存储为HashMap。

HashSet和HashMap都是存储对,区别在于在HashMap中你可以指定一个键,而在HashSet中键来自对象的哈希代码

Java中HashSet和HashMap的区别

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;
}

其中,它将Object放入map中作为键和值,是一个最终对象PRESENT,它是dummy。

HashMap和HashSet的第二个区别是,我们使用add()方法将元素放入Set中,但在Java中我们使用put()方法将键和值插入HashMap中。

3) HashSet只允许一个空键,但HashMap可以允许一个空键+多个空值。

以上就是Java中HashSet和HashMap的区别。总之,HashSet和HashMap是两种不同类型的集合,一个是Set,另一个是Map。

HashMaps允许一个空键和空值。它们不是同步的,这提高了效率。如果需要,你可以使用Collections.SynchronizedMap()使它们同步

Hashtables不允许空键并且是同步的。

Java中HashSet和HashMap的差异

HashSet内部使用HashMap存储对象。当add(String)方法调用时,它调用HahsMap put(key,value)方法where key=字符串对象&值=新对象(虚拟)。所以它不维护重复,因为键只是值对象。

在Hashset/HashMap中作为key存储的对象应该覆盖hashcode &=合同。

在HashMap中用于访问/存储值对象的键应该声明为Final,因为当它被修改时,值对象不能被定位&返回null。

HashMap是Map接口的实现 HashSet是Set Interface

的实现

HashMap以键值对形式存储数据 HashSet只存储

的对象

Put方法用于在map中添加元素 Add方法用于添加Set

的元素 在哈希映射中,哈希码值使用键对象计算 这里成员对象用于计算hashcode值,该值可以对两个对象相同,因此equal()方法用于检查是否相等,如果它返回false,则意味着两个对象不同

HashMap比hashset快,因为使用唯一键访问对象 HashSet比Hashmap

HashSet

  1. HashSet类实现了Set接口
  2. 在HashSet中,存储对象(元素或值) 例:如果我们有一个字符串元素的HashSet,那么它可以描述一个 HashSet元素集合:{" Hello ", " Hi ", " Bye ", " Run "}
  3. HashSet不允许重复表示您的元素 不能在HashSet中存储重复的值。李< / >
  4. HashSet允许有一个空值。
  5. HashSet没有同步,这意味着除非显式同步,否则它们不适合线程安全操作。

                          add      contains next     notes
    HashSet               O(1)     O(1)     O(h/n)   h is the table
    

HashMap

  1. HashMap class implements the Map interface
  2. HashMap is used for storing key & value pairs. In short, it maintains the mapping of key & value (The HashMap class is roughly equivalent to Hashtable, except that it is unsynchronized and permits nulls.) This is how you could represent HashMap elements if it has integer key and value of String type: e.g. {1->”Hello”, 2->”Hi”, 3->”Bye”, 4->”Run”}
  3. HashMap does not allow duplicate keys however it allows having duplicate values.
  4. HashMap permits single null key and any number of null values.
  5. HashMap is not synchronized which means they are not suitable for thread-safe operations until unless synchronized explicitly.[similarity]

                           get      containsKey next     Notes
    HashMap               O(1)     O(1)        O(h/n)   h is the table
    

Please refer this article to find more information.

HashMap是一个Map实现,允许重复的值,但允许没有重复的钥匙。。添加对象需要一个键/值对。允许使用空键和空值。例如:

{,世界- > 5 - > 3 - > 2,好- > 4}

HashSet是一个Set实现,它执行不允许复制。如果你试图添加一个重复的对象,调用public boolean add(Object o)方法,那么集合保持不变并返回false。例如:

(,世界,好)

Hashset内部实现了HashMap。如果你看到内部实现,插入HashSet中的值被存储为HashMap中的键,并且值是object类的Dummy对象。
HashMap和HashSet的区别是:-

  1. HashMap包含键值对,每个值都可以通过键访问,而HashSet每次都需要迭代,因为没有get方法。
  2. HashMap实现了Map接口,允许一个空值作为键,多个空值作为值,而HashSet实现了Set接口,只允许一个空值,没有重复的值。(请记住,HashMap键中允许有一个空键,因此HashSet中允许有一个空值,因为HashSet在内部实现HashMap)。
  3. HashSetHashMap在迭代时不保持插入顺序。

它们之间的主要区别如下:

HashSet

  • 它不允许重复密钥。
  • 即使它不是同步的,这样也会有更好的性能。
  • 它允许一个空键。
  • 当您想要维护一个唯一的列表时,可以使用HashSet。
  • HashSet实现了Set接口,它是由哈希表(实际上是HashMap实例)支持的。
  • HashSet存储对象。
  • HashSet不允许重复元素,但允许空值。
  • 该接口不能保证顺序随时间保持不变。

HashMap

  • 允许重复键。 它不是同步的,所以这样会有更好的性能
  • HashMap不维护插入顺序。
  • 顺序由哈希函数定义。
  • 它不是线程安全的
  • 它允许键和值都为空。
  • 它允许一个空键和任意多的空值。
  • HashMap是Map接口基于哈希表的实现。
  • HashMap存储对象为键和值对。
  • HashMap不允许重复键,但是允许空键和值。
  • 元素的顺序不保证超时。