Java - LinkedList中的“旋转”对象 - LinkedList.addLast(LinkedList.removeFirst())是好还是坏编程?

时间:2010-07-21 21:43:09

标签: java linked-list

在我的Java应用程序中,以下两个内容都将编译并运行,并生成所需的结果。

//"Rotate" the list items one place to the left.
myLinkedList.addLast(myLinkedList.removeFirst());

反方向的“旋转”

//"Rotate" the list items one place to the right.
myLinkedList.addFirst(myLinkedList.removeLast());

两个“旋转”每个只需要一行代码,但我想知道这是否是正确的方法呢?这种方法有什么缺陷吗?

是否有一种更好,更强大,更容易出错的方法,就像我上面那样需要多行代码才能实现,如果有,请解释原因。

3 个答案:

答案 0 :(得分:4)

对我来说似乎很好。如果你有一个真正的循环缓冲区 full 你可以只移动“开始/结束”索引,但我认为链表方法可以很好地工作。特别是它仍然是O(1)。

答案 1 :(得分:2)

我建议使用Collections.rotate

答案 2 :(得分:1)

我会像你一样完全实现它。

myLinkedList.addLast(myLinkedList.removeFirst());

我唯一可以看到这是“糟糕编程”的方法是,如果列表在线程之间共享,并且您的方法将元素从一端旋转到另一端而不保持锁定(我不知道任何并发{{1可以原子方式旋转的实现。)