HashMap和HashSet

Anonim

当您学习新的计算机语言时,您首先要问的是如何处理大量数据。本主题通常包含在“数据结构”主题中。如果深入挖掘,必须在许多其他数据结构中使用链接列表,队列,堆栈和二叉树等主题。在Java中,这些结构是Java Collections Framework的一部分。集合只不过是一种数据结构,它指的是多个数据元素的分组,Java集合框架标准化了这些对象组的处理方式。实际上,集合框架旨在实现多个目标。

整个集合框架围绕一组标准接口设计。这些接口提供了几个标准实现,如LinkedList,HashSet和TreeSet,您可以按原样使用。此外,如果您愿意,还可以实现自己的集合。但是,除了集合之外,框架还定义了几个映射接口和类。 Java包含三个通用映射实现--HashMap,TreeMap和LinkedHashMap - 它们存储键/值对。虽然地图不是技术上的集合,但它们与集合完全集成。事实上,地图专注于对象之间的关联组。本文总结了HashMap和HashSet之间的主要区别。

什么是HashMap?

HashMap是Map接口最常用的实现,它提供了元素无序的基本键/值映射。它使用一个称为哈希码的特殊值,而不是对密钥的慢速搜索。哈希码是一种在相关对象中获取信息并将其转换为该对象的“相对唯一”int的方法。它只适用于散列原理,这意味着它使用散列函数来映射标识值。就像Vector和Stack在ArrayList和LinkedList中有替换一样,Hashtable在HashMap中有替换。它扩展了AbstractMap,使用内部Hashtable表示来实现Map接口。与其他通用实现类似,HashMap支持Map的可选方法,允许空值,并且不同步。

什么是HashSet?

HashSet是实现Set接口的Java Collections Framework的成员之一,由一个哈希表支持,该哈希表实际上是一个HashMap实例。顾名思义,它由哈希表实现,哈希表是一个数组,其中元素存储在从其内容派生的位置。与Map不同,Set完全是一个具有完全相同接口的Collection,因此没有任何额外的功能,就像有两个不同的列表。 HashSet使用散列函数,专门用于快速查找。它是无序的唯一对象集合,无法存储重复值。 HashSet扩展了实现Set接口的AbstractSet类。但是,HashSet不会定义除其超类和接口提供的方法之外的任何其他方法。

HashMap和HashSet之间的区别

  1. 基本

HashMap是Map接口最常用的实现,它提供了元素无序的基本键/值映射。它只适用于散列原理,这意味着它使用散列函数来映射标识值。另一方面,HashSet是实现Set接口的Java Collections Framework的成员之一,由一个哈希表支持,该哈希表实际上是一个HashMap实例。简单来说,HashMap实现了Map接口,而HashSet实现了Set接口。

  1. 功能

HashSet创建一个使用哈希表进行存储的集合。哈希表使用名为hashing的方法存储信息。 HashSet使用散列函数(专门用于快速查找)来存储元素或值。大多数HashSet功能是通过AbstractCollection和AbstractSet超类提供的,HashSet与TreeSet共享。 HashMap扩展了AbstractMap,使用内部Hashtable表示来实现Map接口。这两个类都不同步,这意味着它们不适合线程安全操作。

  1. 重复值

由于Map不支持重复键,因此HashMap不允许重复键,但允许重复键。这意味着重复值可以存在于HashMap中,但您可以将集合用作某个键的值。每个键在HashMap中必须是唯一的,并且不能允许单个键具有多于1个值。另一方面,HashSet不能仅通过Set的定义来拥有重复元素,这意味着您无法在HashSet中存储重复值。 HashMap只允许一个空键但允许任意数量的空值,而HashSet只允许一个空值。

  1. 存储机制

HashMap使用散列原理,这意味着它使用散列函数在内部使用散列算法映射标识值,以便轻松检索。当应用于同一对象时,真正的散列机制总是返回相同的hashCode()。另一方面,HashSet在内部使用HashMap作为后备数据结构来添加或存储对象。这意味着当创建HashSet的对象时,它将创建HashMap的对象。

HashMap与HashSet:比较图表

HashMap的概述。 HashSet的

虽然HashMap和HashSet都不同步,这意味着它们不适合线程安全操作,并且它们是完全不同的构造,它们为基本操作提供恒定的时间性能,例如添加,删除元素等。而HashMap是一个通用的实现存储键/值对的Map接口,HashSet是Set接口的实现。 HashSet确实使用HashMap来支持其实现。但是,HashMap使用散列原理并使用它来快速搜索密钥。