# 2.4.7 数组类型

数组是由任意多的槽组成的 Lisp 对象，和列表类似，每个槽都可以指向任何的 Lisp 对象；和列表不同，数组的内存是一大块连续的内存，因此查找速度会更快，基本上是常数时间。相比之下，列表的查找时间取决于被查元素的位置。（在列表末尾的元素的查找时间要远远长于列表开头的元素。）

Emacs 定义了四种数组：字符串，向量，布尔向量，以及字符表。

字符串是由字符组成的数组，而向量是由任意对象组成的数组。一个布尔向量只能装着 nil 或者 t。这些数组的最大长度可以一直到 fixnum 能取到的最大值，而这个最大值一般取决于具体的机器架构限制和可用内存。字符表是使用字符索引的数组，它可以储存任何对象。

数组的第一个元素的索引是 0，第二个元素的索引是 1，以此类推。这种索引叫做从零开始的索引。举个例子，一个 4 元素数组由0，1，2，3这四个索引切片。最大的索引值应当是数组长度减一。**一旦数组被创建了，它的长度就固定了。**

所有的 Emcas Lisp 数组都是一维的。（绝大多数的其他语言提供多维数组，不过这并不重要；在这里，你可以使用复合的一维数组模拟出一样的效果。）每种数组都有它们自己的读取语法。接下来的几章会详细解释。

另外，时刻记住，数组类型是序列类型的子集。数组类型又包括了字符串类型，向量类型，布尔向量类型以及字符表类型。
