Arrays 公共Lisp中的数组、列表和哈希表
我想知道CommonLisp中数组、列表和哈希表之间的区别是什么。也就是说,我知道如何在语法上实现和使用它们。我还了解围绕这三种数据类型的计算机科学理论Arrays 公共Lisp中的数组、列表和哈希表,arrays,list,common-lisp,big-o,sbcl,Arrays,List,Common Lisp,Big O,Sbcl,我想知道CommonLisp中数组、列表和哈希表之间的区别是什么。也就是说,我知道如何在语法上实现和使用它们。我还了解围绕这三种数据类型的计算机科学理论 我想知道的是什么是常见的Lisp特定实现?如何使用它们来优化代码的性能(空间和时间)?在Common Lisp中,这些数据结构有什么特点吗?它们在运行时的成本有多高?区别在于实际实现和实现后的性能(定义为O(大小)) 列表被实现为链表,因此它们可以有复杂的嵌套和数据共享 添加到开头-O(1)() 添加到末尾-O(n)() 随机存取-O(n)()
我想知道的是什么是常见的Lisp特定实现?如何使用它们来优化代码的性能(空间和时间)?在Common Lisp中,这些数据结构有什么特点吗?它们在运行时的成本有多高?区别在于实际实现和实现后的性能(定义为
O(大小)
)
列表被实现为链表,因此它们可以有复杂的嵌套和数据共享
O(1)
()O(n)
()O(n)
()O(n)
中的常数应较小)
数组作为向量(内存的连续部分)实现,并在上面加上(索引算法自动完成)。
数组也可以
O(n)
(需要一个循环来移动数据)O(1)
()-如果使用&c,则平均为O(1)
()v
具有类型(简单数组双浮点(5))
,则(aref v2)
可能必须分配内存以框显返回值(编译器)
可能会消除一些此类分配,但您需要注意
危险)
哈希表是完全不同的-它们不是,所以它们允许从任意数据映射(与序列的整数索引相反),并且访问(读和写)是O(1)
哈希表可以与and进行比较(这对于小型表来说是一个很好的选择)
哈希表的主要考虑因素是
eq
哈希表,则实现可能会使用对象地址
在内存中作为散列的(源),如果它有一个复制垃圾
收集器,它必须重新散列每个GC上的所有哈希表
您可能会发现最好使用字符串作为哈希表键
通常散列最好。
因为你,,
本质上,美化的字符串哈希表连接到
,所以实现是
通常要确保它们非常好。他说,“我知道如何在语法上实现和使用它们。我也了解围绕这三种数据类型的计算机科学理论。“我以为这涵盖了你迄今为止的答案……”RainerJoswig:我扩展了我的答案,以澄清lisp特定的问题。