2014-02-16 5 views
4

Есть ли несинхронизированная версия java.util.Stack?Есть ли несинхронизированный java.util.Stack?

ArrayList имеет почти все, что я хочу, за исключением того, что, как представляется, не существует метода, который удаляет последний элемент в арифметическом постоянном времени.

Я хочу что-то, что может действовать как стек, но все же позволяю мне иметь постоянный случайный доступ к элементам.

Если там действительно нет ничего, это не имеет большого значения для меня, чтобы просто раскатать мой собственный или просто использовать java.util.Stack, но это показалось мне странным, что я не мог найти Stack «s несинхронизированная коллега, что я подумал, что это может быть интересно спросить (также Googling просто, казалось, указывал мне на другие реализации, а не на класс в стандартной библиотеке).

+0

Что делает синхронизацию нужно делать с ним? – Visionstar

+0

@Visionstar Я слышал, что это было медленнее. Документы, похоже, говорят, что мы [должны «предпочесть» ArrayList над Vector, если параллелизм не является проблемой] (http://docs.oracle.com/javase/7/docs/api/java/util/Vector.html). Но это не совсем важно для моей цели; Мне в основном просто любопытно – math4tots

+0

Я бы поспорил, что 'arrayList.remove (arrayList.size() - 1)' работает в постоянное время, хотя remove() работает в линейном времени в общем случае. Это потому, что я подозреваю, что линейное время в общем случае используется для перемещения всех элементов после удаления элемента вверх по одной позиции в базовом массиве. –

ответ

3

Когда структура коллекций была расширена, Stack был заменен интерфейсом Deque. Он поддерживает те же методы push, pop и peekStack.

Реализации Deque включают ArrayDeque и LinkedList.

+0

Reimeus, похоже, предложил 'ArrayDeque' тоже, но я не могу найти способ для случайного доступа в' ArrayDeque'. Кроме того, я бы предположил, что «LinkedList» займет линейное время для извлечения элементов. – math4tots

+0

@ math4tots О, извините, я пропустил эту часть вашего вопроса. Нет, в «Deque» нет случайного доступа. 'LinkedList' - это линейное время, как вы говорите (хотя это список с двойной связью, поэтому он может проходить с обоих концов). Если вам нужен случайный доступ и методы push/pop, вам придется сворачивать самостоятельно. – Boann

1

Альтернативой предложено в javadoc в виде Deque

Deque<Integer> stack = new ArrayDeque<Integer>(); 
+0

ArrayDeque разрешает случайный доступ? – math4tots

+0

У вас означает [этот 'ArrayDeque'] (http://docs.oracle.com/javase/7/docs/api/java/util/ArrayDeque.html)? Потому что я не вижу упоминания о ['RandomAccess'] (http://docs.oracle.com/javase/7/docs/api/java/util/RandomAccess.html) на странице ... Хотя, я также предположил бы, что класс с именем «ArrayDeque» позволит случайный доступ ... lol – math4tots

+0

Хотя 'ArrayDeque' организует свои элементы по массиву, он не позволяет произвольный доступ к ... – Reimeus

Смежные вопросы