ใน J2SE6 มีการแนะนำคลาส ArrayDeque ซึ่งสืบทอดอินเทอร์เฟซ deque (bidirectional queue) การใช้คลาสนี้คุณสามารถใช้ฟังก์ชั่นของคลาส java.util.stack ด้วยตัวเองและลบฟังก์ชันการซิงโครไนซ์แบบมัลติเธรดของ java.util.stack
ตัวอย่างเช่นสร้างสแต็กที่เก็บประเภทจำนวนเต็มเพียงสร้างตัวแปรของคลาส ArrayDeque เป็นคุณสมบัติในชั้นเรียนแล้วกำหนดเป็นสแต็กและป้อนสแต็กและสังเกตองค์ประกอบที่ด้านบนของสแต็กและใช้งานตัวแปรอินสแตนซ์โดยตรง
นำเข้า java.util.arraydequ; นำเข้า java.util.dequ; คลาสสาธารณะ IntegerStack {Private Deque <Integer> data = new ArrayDequ <Integer> (); โมฆะสาธารณะกด (องค์ประกอบจำนวนเต็ม) {data.addfirst (องค์ประกอบ); } Public Integer Pop () {return data.removefirst (); } Public Integer Peek () {return data.peekfirst (); } สตริงสาธารณะ toString () {return data.toString (); } โมฆะคงที่สาธารณะหลัก (สตริง [] args) {integerstack stack = new integerstack (); สำหรับ (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 ("หลังจาก popping 1 องค์ประกอบ:" + stack); int n = stack.peek (); System.out.println ("peeked element =" + n); System.out.println ("หลังจากการแอบดู 1 องค์ประกอบ:" + สแต็ค); - ซอร์สโค้ดของ java.util.arraydeque:
องค์ประกอบส่วนตัว E [] หัว Int ชั่วคราวส่วนตัว หางชั่วคราวส่วนตัว; /*ตำแหน่งที่เก็บไว้ที่ E ที่นี่จะถูกเก็บไว้จากตำแหน่งสุดท้ายของอาร์เรย์องค์ประกอบ*/ โมฆะสาธารณะ addfirst (e e) {ถ้า (e == null) โยน nullpointerexception ใหม่ (); องค์ประกอบ [head = (head - 1) & (elements.length - 1)] = e; // ค่าเริ่มต้นสำหรับความจุอาร์เรย์แรกคือ 16, head = (0-1) & (16-1) = 15 ถ้า (หัว == หาง) doubleCapacity (); } /*ทุกครั้งที่มีการขยายกำลังการผลิตมันจะถูกนำกลับเข้าไปในอาร์เรย์ใหม่ตามลำดับการแทรกและส่วนที่แทรกล่าสุดจะถูกวางไว้ที่ตำแหน่งแรกของอาร์เรย์ */ โมฆะส่วนตัว doubleCapacity () {ยืนยันหัว == หาง; int p = head; int n = องค์ประกอบความยาว; int r = n - p; // จำนวนองค์ประกอบทางด้านขวาของ p int newcapacity = n << 1; ถ้า (newcapacity <0) โยน unleelsmlesTateException ใหม่ ("ขออภัย deque ใหญ่เกินไป"); วัตถุ [] a = วัตถุใหม่ [newcapacity]; System.ArrayCopy (องค์ประกอบ, P, A, 0, R); System.ArrayCopy (องค์ประกอบ, 0, A, R, P); องค์ประกอบ = (e []) a; หัว = 0; หาง = n; } สาธารณะ e removeFirst () {e x = pollfirst (); ถ้า (x == null) โยน nosuchelementException ใหม่ (); กลับ x; } สาธารณะ e pollfirst () {int h = head; e result = องค์ประกอบ [h]; // องค์ประกอบเป็นโมฆะถ้า deque ว่างถ้า (result == null) ส่งคืน null; องค์ประกอบ [h] = null; // รีเซ็ตตำแหน่งนี้ในอาร์เรย์เป็น NULL สำหรับการรวบรวมขยะที่สะดวก head = (h + 1) & (elements.length - 1); // ย้อนกลับค่าของหัวซึ่งเทียบเท่ากับการย้ายตัวชี้ของสแต็กลงหนึ่งกริด ตัวอย่างเช่น 12-13 ผลการส่งคืน; } สาธารณะ e peekfirst () {องค์ประกอบกลับ [หัว]; // องค์ประกอบ [หัว] เป็นโมฆะถ้า deque ว่างเปล่า}ข้างต้นเป็นเรื่องเกี่ยวกับบทความนี้ฉันหวังว่ามันจะเป็นประโยชน์สำหรับทุกคนในการเรียนรู้การเขียนโปรแกรม Java