J2SE6에서는 Deque (양방향 대기열) 인터페이스를 상속하는 ArrayDeque 클래스가 소개되었습니다. 이 클래스를 사용하면 java.util.stack 클래스의 함수를 직접 구현하고 java.util.stack의 다중 스레드 동기화 기능을 제거 할 수 있습니다.
예를 들어, 정수 유형을 저장하는 스택을 만들고 클래스의 속성으로 배열 클래스의 변수를 만들고 스택으로 정의하고 스택을 입력하고 스택 상단의 요소를 관찰하고 배열의 인스턴스 변수를 직접 작동합니다.
import java.util.arraydequ; java.util.dequ; 공개 클래스 integerstack {private deque <integer> data = new arraydequ <integer> (); public void push (정수 요소) {data.addfirst (요소); } 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 stack = new Integerstack (); for (int i = 0; i <5; i ++) {stack.push (i); } system.out.println (스택); System.out.println ( "5 가지 요소를 밀고 나서 :" + 스택); int m = stack.pop (); System.out.println ( "popped element =" + m); System.out.println ( "1 extment :" + stack); int n = stack.peek (); System.out.println ( "Peeked Element =" + N); System.out.println ( "1 lection을 살펴본 후 :" + 스택); }} java.util.arraydeque의 소스 코드 :
개인 과도 E [] 요소; 개인 과도 int 헤드; 개인 과도 int 꼬리; /*여기에 저장된 위치는 요소 배열의 마지막 위치에서 저장됩니다*/ 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 == tail) doubleCapacity (); } /*용량이 확장 될 때마다 삽입 순서대로 새 배열로 다시 넣고 최신 삽입 된 제품은 배열의 첫 번째 위치에 배치됩니다. */ private void doubleCapacity () {assert head == 꼬리; int p = 헤드; int n = 요소. 길이; int r = n -p; // p int newCapacity의 오른쪽에있는 요소 수 = n << 1; if (NewCapacity <0) New ImperalStateException을 던지십시오 ( "죄송합니다, 너무 큰 Deque"); Object [] a = new Object [newCapacity]; System.ArrayCopy (요소, P, A, 0, R); System.ArrayCopy (요소, 0, A, R, P); 요소 = (e []) a; 머리 = 0; 꼬리 = n; } public e removeFirst () {e x = pollfirst (); if (x == null) 새로운 nosuchelementException ()을 던지십시오. 반환 x; } public e pollfirst () {int h = 헤드; e 결과 = 요소 [h]; // deque empty if (result == null) return null; 요소 [h] = null; // 편리한 쓰레기 수집을 위해 배열 에서이 위치를 널로 재설정하십시오. head = (h + 1) & (elements.length -1); // 헤드 값을 되돌립니다. 예를 들어, 12-> 13 리턴 결과; } public e peekfirst () {return elements [head]; // 요소 [헤드]는 deque empty가 늘어납니다}위의 내용은이 기사에 관한 모든 것입니다. 모든 사람들이 Java 프로그래밍을 배우는 것이 도움이되기를 바랍니다.