Java:替代 LinkedList 或 int 指针数据结构

标签 java pointers insert linked-list

由于 LinkedList 在内存开销方面是一场噩梦,而且在迭代元素时速度也较慢,所以我想要类似 int poiter 数据结构。

所以我有一个整数列表,我通过在开头-中间插入元素来构成它。列表准备就绪后,我从左侧开始逐个迭代。这是我的问题约束。

最佳答案

我会剖析并尝试不同的数据结构。

话虽这么说,为什么不尝试使用ArrayList;它可以快速迭代甚至插入,而在 O(n) 中,速度很快,因为在缓存中移动连续数据快如闪电。 (如果你在插入的时候也反转列表会更快!)


更新,因为我的程序员同事不明白为什么我推荐 ArrayList 来解决这个特殊问题:

问题不是插入元素。在这种情况下,链表直接获胜(O(1) 对数组列表的 O(n))。 问题是找到插入它们的地方。在这种情况下,LinkedList 真的很慢。找到插入位置的开销很大,因为它没有以“好事”的方式分配内存。大量缓存未命中!

OP 没有发布任何代码,所以我们只知道 OP 想要什么,但这里是两种情况的算法分析(其中 C* 是常量):

LinkedList,对于每个要插入的元素:

  • 迭代 O(C1 * n)
  • 插入 O(1)

ArrayList,对于每个要插入的元素:

  • 迭代 O(C2 * n)
  • 插入O(C3 * n)

因此,这两种算法都在 O(n) 中,但仔细观察常量:C1 确实很大(如上文所述)。另一方面,C2C3 很小,因为在缓存中迭代和移动很快。

所以,如果你有足够的内存,试试 ArrayList!

关于Java:替代 LinkedList 或 int 指针数据结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12004360/

相关文章:

java - 为什么实现 Serializable 的对象的序列化会抛出异常?

java - Java/.NET 互操作工具(IKVM、JNBridge 等)的效率和有效性

java - 在 Eclipse 启动时启动 Tomcat?

java - 最终类是否必须重写 equals() 和 hashCode() 方法

c++ - 将 vector<char> 传递给指针 char*

指针取消引用符号 * 可以称为 "many"吗?

c++ - 我必须为我的 C++ 类字段使用指针吗?

c# - 向datagridview c#添加新的空白行

SQL Server错误: "Cannot insert explicit value for identity column" even when I SET IDENTITY_INSERT ON

php - 使用 PHP 将定义的变量插入 MySQL 数据库/表,没有数据(显然)被写入数据库?