代码之家  ›  专栏  ›  技术社区  ›  Andrew S.

Lisp中的哈希表类型

  •  3
  • Andrew S.  · 技术社区  · 7 年前

    1 回复  |  直到 7 年前
        1
  •  7
  •   cebola    7 年前

    热释光;博士 类型化向量可以针对内存使用进行优化,但类型化哈希表通常是毫无意义的。


    免责声明:这主要是基于直觉,它甚至不接近一个权威的答案。

    类型化向量很有用,因为它们是在内存中连续存储数据的最实用的方法——如果您知道所有元素的类型(也正因为如此,还有大小),只需分配足够的内存就可以将所有元素存储在一起。正如您可能已经知道的,CL的位向量只是:一个最佳存储的、可单独访问的位的抽象。如果没有类型信息,则必须存储指向散乱的实际数据块的指针向量。

    如果您熟悉如何实现一个简单的哈希表,那么您就知道类型信息在这里不太有用。将实际数据存储在表中(通常是指针向量)有点尴尬,这可能是因为处理哈希键冲突变得更加困难(否则最终会得到一个链表),或者是因为调整表的大小需要将所有数据复制到一个新表中,而不是仅仅更改几个指针。当然,调整向量的大小也需要复制所有内容,但这是在一个步骤中完成的,而对于哈希表,必须对每个元素执行一次,因为它们在表中的位置将发生变化。基本上没有什么好处。