list - 何时选择容器/列表而不是切片
问题描述
我没有遇到任何问题,这是切片无法解决的。
interface{}
根据列表实现,列表迭代也不支持任何插入到列表最终创建一个将值包装到 Range 的新元素结构。我发现一些文章说永远不要list.List
在生产中使用。
只是想知道,为什么它存在于 go 源包 [ https://golang.org/pkg/container/list/]
这里有人,在生产中使用过列表并获得了一些优势吗?
解决方案
list.List
是双向链表的实现。切片是对数组的抽象。切片提供功能丰富的数组,包括无需复制数据的增长数组,无需重新分配或复制即可获取切片的“切片”。
这一切都归结为用例。链表本质上是一个不断增长的项目列表,不需要复制任何数据。链表非常适合必须在一个方向上遍历的增长数据。如果必须任意访问数据(从没有游标的任何索引),或者必须从中间动态添加和删除数据,则数组/切片是完美的。
这是一个普遍的答案。最重要的是,90% 的时间你都不需要 list.List
。切片就够了。
推荐阅读
- java - SDK 不支持选定的 Java 版本 15(最多 14 个)
- php - 无法在保存后分配父类别
- java - 使用长类型字段排序在 Spark Java 数据集中不起作用
- python - Python 套接字接收函数
- c# - 如何在没有名称的按钮上触发点击事件
- r - R中的连续博伊斯指数(CBI)
- c# - 如何将 Azure AD SAML 连接到我现有的 .net webforms 应用程序?
- r - Levenshtein 距离:解决字符串变量拼写不一致的问题
- ionic-framework - 如何在关联的 Bitbucket 帐户中使用“离子登录”?
- javascript - 在 Odoo-12 POS UI Book Orders 中出现未知的 CORS 错误