【发布时间】:2018-02-01 22:20:17
【问题描述】:
我在这里阅读了一个解决方案(https://leetcode.com/problems/longest-substring-without-repeating-characters/solution/).They 说在正常情况下,当我们不知道键的(字符)范围时,我们使用 hashmap。
还有另一种解决方案,当我们对字符集有特殊要求时,我们可以使用数组来代替。
前面的实现都没有假设字符串s的字符集。
如果我们知道字符集很小,我们可以将 Map 替换为 一个整数数组作为直接访问表。
常用的表格有:
int[26] for Letters 'a' - 'z' or 'A' - 'Z' int[128] for ASCII int[256] for Extended ASCII
不仅在这里,而且在 Cracking the Coding 采访书中的几个位置,他们使用一个数组,其中字符是键,通过等效整数表示一个字符并将值存储在该数组中的相应位置。
当我们手头有 hashmap 时,为什么我们要与数组斗争? 有什么原因吗?
【问题讨论】:
-
速度更快,占用空间更少。
-
和更少的时间和空间开销
-
他们认为它更快并且使用更少的空间。
-
@TimothyTruckle 或者他们已经测量过,发现它需要更少的时间和空间。数组
T[]逻辑上是Map<int, T>;它的开销几乎与您在 Java 中可以摆脱的一样少。 -
@AndyTurner 通常节省的空间并不重要,因为应用程序没有受到内存不足的影响,并且基于数组的解决方案的编码(和测试)时间通常超过生命周期中运行时节省的时间应用程序的数量级...但是,将 C++ 最佳实践(如本例中的手动内存管理)接管到 Java 通常不是一个好主意....
标签: java arrays hashmap key-value