Java - "вращающиеся" объекты в LinkedList - является ли LinkedList.addLast (LinkedList.removeFirst ()) хорошим или плохим программированием? - PullRequest
5 голосов
/ 22 июля 2010

В моем 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 ]

4 голосов
/ 22 июля 2010

Кажется, хорошо для меня. Если бы у вас был действительно циклический буфер, который был full , вы могли бы просто переместить индекс «начало / конец», но я думаю, что подход со связанным списком будет работать довольно хорошо. В частности, это все еще O (1).

2 голосов
/ 22 июля 2010

Я предлагаю использовать Collections.rotate.

1 голос
/ 22 июля 2010

Я бы реализовал это именно так, как вы.

myLinkedList.addLast(myLinkedList.removeFirst());

Единственный способ понять, что это «плохое программирование», - это если список разделяется между потоками, а ваш метод вращает элемент с одного конца на другой без удержания блокировки (я не знаю ни о каком параллельном Queue реализация, которая может вращаться атомарно.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...