【问题标题】:enqueue an element without changing the structure在不改变结构的情况下将元素加入队列
【发布时间】:2013-08-24 16:58:21
【问题描述】:

有没有办法在调用入队函数后返回一个队列,使得返回的队列包含新元素而原始队列保持不变?

例如

ArrayList<T> result = new ArrayList<T>(list);
result.add(0, t);
return result;

这将返回一个新队列,但这种方法太慢了。 还有其他方法吗?也许通过与原始队列共享结构?

主要问题是如何返回一个新队列(在将一个元素附加到队列之后)但不复制原始队列的其余部分。 (有没有办法参考?)

例如original_queue=[1 2 3 4 5]

调用 enqueue(6) 应该返回 [1 2 3 4 5 6]

但 original_queue=[1 2 3 4 5]

【问题讨论】:

  • 在不知道您的用例是什么的情况下,很难提供建议。如果您告诉我们您想要实现的目标,我们或许可以为您提供更好的方法来实现相同的目标,也许根本不需要使用单独的队列/列表。
  • 所以基本上,你想要的是一个持久队列?
  • 不,我不是这个意思。你想解决什么问题?示例:“我有一个篮球模拟游戏,我将篮球表示为队列中的项目。我想添加新篮球,但将新篮球拆分到新游戏中,同时将它们保留在原始游戏中。我'我目前用 ArrayLists 做这个,但是太慢了。有什么方法可以更快吗?”
  • @robert 给出了一个例子,我没有试图实现这样的任务。只是想实现我提到的例子
  • 完全有可能您从计算机上请求的内容已经消耗了最少数量的时钟周期。每次都新建一个 ArrayList 并不是完全免费的操作。

标签: java queue performance


【解决方案1】:

CopyOnWriteArrayList 可能是您队列的替代方案,它可能具有您想要的行为。没有评论这是否足以满足您的目的。

【讨论】:

  • 这并没有真正改变效率。它和以前一样。 :)
猜你喜欢
  • 2011-06-30
  • 2017-07-30
  • 2012-10-05
  • 1970-01-01
  • 2011-01-16
  • 2013-10-25
  • 2012-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多