哈希表与哈希图的区别介绍

1,269 阅读4分钟

Hash Table vs Hash Map

哈希表与哈希图的区别

哈希表与哈希图将给出哈希表和哈希图的区别。这两者都是使用散列技术来存储唯一的键。这些都是基于散列和地图实现的数据结构。哈希表实现了关联数组的抽象类型,是一种将键值映射为值的数据结构。它在计算索引时使用散列函数,称为散列代码,进入一个槽或桶的数组,从那里可以找到所需的值。让我们更深入地了解哈希表与哈希图的比较。

哈希表与哈希图的正面比较(信息图表)

下面是哈希表与哈希图之间的13大区别:

Hash-Table-vs-Hash-Map-info

哈希表与哈希图的主要区别

以下是主要的区别:

  • 哈希表是在Java的第一个版本,即JDK 1.0中引入的,但在JDK 1.2中为实现Map接口而进行了重构,使其成为Java集合框架的一员。
  • 哈希图是在Java JDK 1.2的第2版中引入的。
  • 哈希表是同步的,因此与哈希图相比,其操作速度较慢。如果用户不是在多线程环境下工作,Java JDK建议使用Hash Map。
  • 哈希表扩展了字典,也就是说,它将非空的键映射为值。用户可以查询与键相对应的值。
  • 在Java中,Hash Table和Hash Map分别使用java.util.Hashtable和java.util.HashMap等java util属性。
  • 哈希表和哈希图在Java中没有提到任何插入顺序。
  • 哈希图和哈希表都是Java中java.util.Map接口的实现。
  • 对于哈希图和哈希表,GET和PUT方法提供的复杂度在最差和最好的情况下分别为O(n)和O(1)。
  • 同步操作会导致性能下降,因此要避免,而哈希图就是被使用的方法。
  • 像get(), put(), remove(), containsKey()这样的方法提供了恒定的时间性能。在内部,这些方法是基于散列桶的概念来存储数据的。
  • Hash Map和Hash Table在元素数量达到loadFactor的时候会被调整大小。这些在较小的loadFactor下速度更快,并且占用空间。哈希函数在素数容量下工作得更好。

比较表

下面是哈希表与哈希图的比较:

哈希表

哈希图

哈希表是一个传统的类,在哈希图之前就已经被引入。另一方面,Hash Map是Hash Table的高级版本,在JDK1.2中作为一个新的类被引入。
哈希表的内部实现方式是不允许出现空键或空值。而Hash Map允许一个空键和多个空值
哈希表是同步的和线程安全的,因此可以与其他线程共享。在哈希图中没有实现同步,也不是线程安全的。因此,如果没有完美的同步代码,它就不能在其他线程之间共享。
哈希表提供了迭代器和枚举器来遍历存储在其中的值。哈希图提供了一个迭代器,用于迭代/遍历存储在其中的值。
在哈希表中,由于同步,哈希表的速度比哈希图慢,但也消除了额外的编码。由于没有同步,哈希图比哈希表更快,在没有同步的情况下,哈希图更适合。
哈希表继承于字典类哈希图继承于抽象地图类
哈希表不以任何特定的顺序来维护映射关系哈希图维护插入顺序,并根据升序键的顺序对映射进行排序
哈希表不是集合框架的一部分。它是在实现了Map接口后成为集合框架成员的一部分。哈希图实现了一个地图接口,并且从一开始就是集合框架的一部分。
如果需要使用线程安全的操作,可以使用哈希表,因为它的所有方法都是同步的。哈希图用于多线程环境,建议使用并发哈希图
哈希表使用键来实现哈希代码哈希图是对哈希表的一种高级改进。
哈希表的效率是O(1)哈希图的效率是O(1)
哈希表中的枚举器不是快速失效的,会抛出并发修改异常。哈希图中的迭代器是失效快速迭代器
在多线程应用中,哈希表比哈希图更受欢迎。Oracle已经

提供了ConcurrentHashMap作为哈希表的替代品。

在非线程应用中,哈希图比哈希表更适合。