我正在运行一个动态编程函数,我在整个过程中都带有一个字符串列表。
随着时间的推移,我将新字符串附加到此列表的末尾,偶尔我可能会删除最后一个元素。现在我正在使用一个可变的ListBuffer,对附加执行+=
,为删除执行.trimEnd(1)
。
一旦我的动态编程程序完成,我需要有效地能够访问该列表/序列/等的每个元素,并按顺序(我插入的第一个项目将首先被访问,而我插入的最后一个项目将是最后一次访问)。
我也试过ArrayBuffers但它们看起来都太慢了。我正在努力加快这个过程,我想知道我是否正在使用一个具有O(n)操作的数据结构,当有可能有我需要的O(1)时间操作时。
答案 0 :(得分:2)
一个简单的单链表将为你描述的附加/丢弃部分提供O(1)。最糟糕的情况是,如果您需要在处理之前在结尾处反转列表,那么这将是一次支付的O(n)操作。
请注意,如果你沿着这条路走下去,在积累阶段“第一个”和“最后一个”将被颠倒(你将通过获取列表的尾部来预先添加项目并删除第一个项目。)