В J2SE6 был введен класс Arraydeque, который наследует границу раздела Deque (двунаправленная очередь). Используя этот класс, вы можете реализовать функции класса java.util.stack самостоятельно и удаляет функцию многопоточной синхронизации java.util.stack.
Например, создайте стек, который хранит целочисленный тип, просто создайте переменную класса Arraydeque в качестве свойства в классе, а затем определите его как стек и введите стек, и наблюдайте за элементами в верхней части стека и непосредственно управляйте переменной экземпляра Arraydeque.
импортировать java.util.arraydequ; Импорт java.util.deque; открытый класс IntegerStack {private deque <integer> data = new ArrayDeque <Integer> (); public void push (integer element) {data.addfirst (element); } public integer pop () {return data.removefirst (); } public integer peek () {return data.peekfirst (); } public String toString () {return data.toString (); } public static void main (string [] args) {integerStack stach = new IntegerStack (); for (int i = 0; i <5; i ++) {Stack.push (i); } System.out.println (Stack); System.out.println («После нажатия 5 элементов:« + стек); int m = stack.pop (); System.out.println ("popped element =" + m); System.out.println («После того, как я всплыл 1 элемент:» + стек); int n = stack.peek (); System.out.println ("Peeked element =" + n); System.out.println ("После заглянуть 1 элемент:" + стек); }} Исходный код java.util.arraydeque:
частные переходные E [] элементы; частная переходная голова; частный временный хвост; /*Местоположение, где e хранится здесь, хранится в последней позиции массива элементов*/ public void addfirst (e e) {if (e == null) бросить новый NullPointerException (); Элементы [Head = (Head - 1) & (elements.length - 1)] = E; // По умолчанию для первого массива емкость составляет 16, Head = (0-1) & (16-1) = 15 IF (Head == Хвост) DoubleCapacity (); } /*Каждый раз, когда пропускная способность расширяется, она помещается обратно в новый массив в порядке вставки, а последний вставлен находится на первом положении массива. */ private void DoubleCapacity () {assert head == Хвост; int p = голова; int n = elements.length; int r = n - p; // количество элементов справа от p int newcapacity = n << 1; if (newcapacity <0) бросьте новое allodalstateException («Извините, Deque слишком большой»); Object [] a = новый объект [newCapacity]; System.ArrayCopy (Elements, P, A, 0, R); System.ArrayCopy (Elements, 0, A, R, P); элементы = (e []) a; голова = 0; хвост = n; } public e RemoveFirst () {e x = pollfirst (); if (x == null) бросить новый noshelementexception (); возврат x; } public e pollfirst () {int h = Head; E Результат = элементы [h]; // элемент является нулевым, если deque пуст if (result == null) return null; элементы [h] = null; // Сбросить эту позицию в массиве в NULL для удобной сбора мусора. Head = (h + 1) & (elements.length - 1); // Обратите внимание на значение головы, которое эквивалентно перемещению указателя стека в одну сетку. Например, 12-〉 13 Результат возврата; } public e peekfirst () {return Elements [Head]; // Элементы [голова] - это null, если deque пуст}Выше приведено все об этой статье, я надеюсь, что для всех будет полезно изучать программирование Java.