除了HashSet
不允许重复值之外,HashMap
和之间有什么区别HashSet
?
我的意思是实施明智?这有点模糊,因为两者都使用哈希表来存储值。
除了HashSet
不允许重复值之外,HashMap
和之间有什么区别HashSet
?
我的意思是实施明智?这有点模糊,因为两者都使用哈希表来存储值。
HashSet 是一个集合,例如{1,2,3,4,5}
HashMap是一个key -> value(key to value)映射,例如{a -> 1, b -> 2, c -> 2, d -> 1}
请注意,在我上面的示例中,在 HashMap 中不能有重复的键,但它可能有重复的值。
在 HashSet 中,不能有重复的元素。
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
请参阅本文以查找更多信息。
他们的名字都以Hash开头,真是太可惜了。这是其中最不重要的部分。正如其他人指出的那样,重要的部分出现在Hash - Set和Map之后。它们分别是一个Set - 一个无序的集合 - 和一个Map - 一个带有键访问的集合。它们碰巧是用哈希实现的——这就是名称的来源——但它们的本质隐藏在它们名称的那部分后面。
不要被他们的名字所迷惑;它们是截然不同的东西。
内部Hashset
实现HashMap
。如果您看到内部实现,则插入 HashSet 中的值作为键存储在 HashMap 中,并且该值是 Object 类的 Dummy 对象。
HashMap 与 HashSet 之间的区别是:-
HashMap
包含键值对,每个值都可以通过键访问,因为 HashSet 每次都需要迭代,因为没有 get 方法。HashMap
实现 Map 接口,允许一个空值作为键,多个空值作为值,而HashSet
实现 Set 接口,只允许一个空值,不允许重复值。(记住 HashMap 键中允许一个空键,因此 HashSet 中允许一个空值作为HashSet 在内部实现 HashMap)。HashSet
并且HashMap
在迭代时不要保持插入顺序。HashSet 允许我们将对象存储在集合中,而 HashMap 允许我们根据键和值存储对象。每个对象或存储的对象都将拥有密钥。
顾名思义,HashMap 是一个关联Map(从键映射到值),HashSet只是一个Set。
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() 方法将键和值插入 Java 中的 HashMap。
3) HashSet只允许一个空键,而HashMap可以允许一个空键+多个空值。
这就是Java中HashSet和HashMap之间的区别。总之,HashSet 和 HashMap 是两种不同类型的 Collection,一种是 Set,另一种是 Map。
Java中HashSet和HashMap的区别
HashSet 在内部使用 HashMap 来存储对象。当调用 add(String) 方法时,它会调用 HahsMap put(key,value) 方法,其中 key=String object & value=new Object(Dummy)。因此它不会保持重复,因为键只是 Value目的。
作为键存储在 Hashset/HashMap 中的对象应覆盖哈希码和等于合约。
用于在 HashMap 中访问/存储值对象的键应声明为 Final,因为当它被修改时,值对象无法定位并返回 null。
HashSet 在内部使用 HashMap 来存储其条目。内部 HashMap 中的每个条目都由单个 Object 键入,因此所有条目都散列到同一个存储桶中。我不记得内部 HashMap 使用什么来存储其值,但这并不重要,因为该内部容器永远不会包含重复值。
编辑:为了解决马修的评论,他是对的;我倒过来了。内部 HashMap以组成 Set 元素的对象为键。HashMap 的值是一个简单地存储在 HashMap 存储桶中的对象。
AHashMap
是添加、获取、删除……由任何类型的自定义键索引的对象。
AHashSet
是添加元素,删除元素并通过比较它们的哈希来检查元素是否存在。
所以 HashMap 包含元素,而 HashSet 记住它们的哈希值。
区别:关于层次结构:HashSet 实现了 Set。HashMap 实现 Map 并存储键和值的映射。
在数据库中使用 HashSet 和 HashMap 将帮助您理解它们的重要性。
HashSet:一般用于存储唯一的集合对象。
例如:它可以用作实现类,用于存储类 Item 和 Class Bid
之间的多对一关系,其中(Item 有很多 Bids) HashMap:用于将键映射到值。值可以为 null 或任何 Object / 对象列表(本身就是对象)。
HashMap
是一种Map
实现,允许重复值但不允许重复键。. 要添加对象,需要键/值对。允许使用 Null 键和 Null 值。例如:
{The->3,world->5,is->2,nice->4}
HashSet
是一个Set
实现,它不允许重复。如果你试图添加一个重复的对象,一个对public boolean add(Object o)
方法的调用,那么集合保持不变并返回false
。例如:
[这个,世界,是,美好的]
你几乎回答了你自己的问题 - hashset 不允许重复值。使用支持哈希映射构建哈希集将是微不足道的(并且只需检查该值是否已经存在)。我猜各种java实现要么做到这一点,要么实现一些自定义代码来更有效地做到这一点。
基本上在HashMap中,用户必须同时提供Key和Value,而在HashSet中你只提供Value,Key是通过使用哈希函数从Value自动派生的。所以有了 Key 和 Value 之后,HashSet 就可以在内部存储为 HashMap 了。
HashSet 和 HashMap 都存储对,区别在于 HashMap 中可以指定一个键,而 HashSet 中的键来自对象的哈希码
HashMaps
允许一个空键和空值。它们不同步,从而提高了效率。如果需要,您可以使用使它们同步Collections.SynchronizedMap()
Hashtables
不允许空键并且是同步的。
您可以发现它们之间的主要区别如下:
哈希集
哈希映射
HashMap 是 Map 接口的实现 HashSet 是 Set 接口的实现
HashMap 以键值对的形式存储数据 HashSet 只存储对象
put方法用于在map中添加元素 Add方法用于添加元素是Set
在 hash map 中,hashcode 值是使用 key 对象计算的 这里成员对象用于计算两个对象的 hashcode 值,因此 equal() 方法用于检查是否相等,如果它返回 false,则表示两个对象不同。
HashMap 比 hashset 快,因为使用唯一键访问对象 HashSet 比 Hashmap 慢