สรุป
หลังจากเรียนรู้เวกเตอร์เราจะเริ่มเรียนรู้สแต็ก สแต็คง่ายมันสืบทอดมาจากเวกเตอร์ วิธีการเรียนรู้ยังคงเหมือนเดิม ก่อนอื่นให้มีความเข้าใจแบบองค์รวมของสแต็คจากนั้นเรียนรู้ซอร์สโค้ด ในที่สุดก็เรียนรู้ที่จะใช้มันผ่านตัวอย่าง
สแต็คเป็นสแต็ค ลักษณะของมันคือ: ครั้งแรกในและสุดท้าย (filo, แรกในครั้งสุดท้าย)
สแต็คในชุดเครื่องมือ Java นั้นสืบทอดมาจากเวกเตอร์ (คิวเวกเตอร์) เนื่องจากเวกเตอร์ถูกนำไปใช้ผ่านอาร์เรย์ซึ่งหมายความว่าสแต็กยังถูกนำไปใช้ผ่านอาร์เรย์ไม่ใช่รายการที่เชื่อมโยง แน่นอนเราสามารถใช้ LinkedList เป็นสแต็ค! ใน "การแนะนำรายละเอียดเกี่ยวกับเวกเตอร์ (การวิเคราะห์ซอร์สโค้ด) และตัวอย่างการใช้งานของ Java Collection Series 06" โครงสร้างข้อมูลของเวกเตอร์ได้รับการแนะนำในรายละเอียดและโครงสร้างข้อมูลของสแต็กจะไม่ถูกอธิบายที่นี่
java.lang.Object
↳ java.util.abstractCollection <E>
↳ java.util.abstractlist <E>
↳ java.util.vector <e>
↳ java.util.stack <E>
สแต็คคลาสสาธารณะ <e> ขยายเวกเตอร์ <e> {}
ความสัมพันธ์ระหว่างสแต็กและคอลเลกชันมีดังนี้:
สแต็คมีตัวสร้างเริ่มต้นเพียงตัวเดียวดังต่อไปนี้:
สแต็ค ()
API ของสแต็ค
สแต็คเป็นสแต็กและ API ที่ใช้กันทั่วไปมีดังนี้:
บูลีนว่างเปล่า ()
ซิงโครไนซ์ e peek ()
ซิงโครไนซ์ E POP ()
e push (วัตถุ e)
การค้นหา int ที่ซิงโครไนซ์ (Object O)
ตั้งแต่สแต็กและสืบทอดมาจากเวกเตอร์มันยังมี API ทั้งหมดในเวกเตอร์
ซอร์สโค้ดของสแต็คนั้นง่ายมากมาเรียนรู้ด้านล่าง
แพ็คเกจ java.util; Publicclass Stack <e> ขยายเวกเตอร์ <e> {// id id สิ่งนี้ใช้สำหรับการควบคุมการอัพเกรดเวอร์ชันดังนั้นคุณไม่จำเป็นต้องให้ความสนใจที่นี่! ส่วนตัวคงที่สุดท้าย Long SerialVersionUid = 1224463164541339165L; // constructor public stack () {} // ฟังก์ชั่นการผลักดัน: บันทึกองค์ประกอบไปด้านบนของสแต็กสาธารณะ push (รายการ e) {// บันทึกองค์ประกอบไปด้านบนของสแต็ก // การใช้งาน addElement () อยู่ใน vector.java addElement (รายการ); รายการส่งคืน; } // ฟังก์ชั่นป๊อป: ส่งคืนองค์ประกอบด้านบนของสแต็กและลบออกจากสแต็กสาธารณะที่ซิงโครไนซ์ E POP () {e obj; int len = size (); obj = peek (); // ลบองค์ประกอบด้านบนของสแต็ก, removeElementat () อยู่ใน vector.java remverelementat (len - 1); คืน OBJ; } // peek function: ส่งคืนองค์ประกอบด้านบนของสแต็กโดยไม่ต้องดำเนินการลบการดำเนินการสาธารณะที่ซิงโครไนซ์ e peek () {int len = size (); ถ้า (len == 0) โยน emptystackexception ใหม่ (); // ส่งคืนองค์ประกอบด้านบนของสแต็ก Elementat () จะถูกนำมาใช้ใน vector.java return elementat (len - 1); } // ว่าสแต็กเป็นบูลีนสาธารณะที่ว่างเปล่าว่างเปล่า () {ขนาดคืน () == 0; } // ค้นหาตำแหน่งของ "องค์ประกอบ O" ในสแต็ก: จากด้านล่างของสแต็กไปด้านบนของสแต็กการค้นหา int ที่ซิงโครไนซ์สาธารณะ (Object O) {// รับดัชนีองค์ประกอบ Elementat () จะถูกนำไปใช้ใน vector.java int i = lastindexof (o); if (i> = 0) {return size () - i; } return -1; - (01) สแต็กถูกนำไปใช้จริงผ่านอาร์เรย์
เมื่อทำการกด (เช่นการผลักองค์ประกอบเข้าไปในสแต็ก) มันจะเป็นโดยการต่อท้ายองค์ประกอบเข้ากับส่วนท้ายของอาร์เรย์
เมื่อดำเนินการ PEEK (นั่นคือองค์ประกอบด้านบนของสแต็กจะถูกลบออกและไม่มีการลบ) มันเป็นองค์ประกอบที่ส่งคืนจุดสิ้นสุดของอาร์เรย์
เมื่อดำเนินการป๊อป (เช่นการเอาองค์ประกอบด้านบนลงบนสแต็กและลบองค์ประกอบออกจากสแต็ก) มันจะนำองค์ประกอบออกมาในตอนท้ายของอาร์เรย์แล้วลบองค์ประกอบออกจากอาร์เรย์
(02) สแต็คสืบทอดมาจากเวกเตอร์ซึ่งหมายความว่าทั้งคุณสมบัติและฟังก์ชั่นที่เวกเตอร์มีสแต็กเป็นเจ้าของ
ด้านล่างเราเรียนรู้วิธีใช้สแต็คผ่านตัวอย่าง
นำเข้า java.util.stack; นำเข้า java.util.iterator; นำเข้า java.util.list;/*** โปรแกรมทดสอบของสแต็ค @desc ทดสอบการใช้งานของ APIs ทั่วไป * * @author Skywang */คลาสสาธารณะ stacktest {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {stack stack = new Stack (); // เพิ่ม 1,2,3,4,5 ลงในสแต็กสำหรับ (int i = 1; i <6; i ++) {stack.push (string.valueof (i)); } // Traverse และพิมพ์ iteratorthroughrandomaccess สแต็ก (สแต็ก); // ค้นหาตำแหน่งของ "2" ในสแต็กและเอาต์พุต int pos = stack.search ("2"); System.out.println ("โพสต์ของ 2 คือ:"+pos); // หลังจาก PUP สแต็กองค์ประกอบด้านบน Traverse stack.pop (); Iteratorthroughrandomaccess (สแต็ค); // หลังจาก peek stack องค์ประกอบด้านบน, traverse stack string val = (string) stack.peek (); System.out.println ("peek:"+val); Iteratorthroughrandomaccess (สแต็ค); // Traverse Stack IteratorThroughiterator (สแต็ก) ผ่านตัววนซ้ำ } / ** * Traverse Stack ผ่านการเข้าถึงอย่างรวดเร็ว * / โมฆะสาธารณะ iteratorThroughRandomAccess (รายการ) {String val = null; สำหรับ (int i = 0; i <list.size (); i ++) {val = (string) list.get (i); System.out.print (val+""); } system.out.println (); } / ** * วนซ้ำผ่านตัววนซ้ำ * / โมฆะสาธารณะ iteratorThroughiterator (รายการรายการ) {String val = null; สำหรับ (iterator iter = list.iterator (); iter.hasnext ();) {val = (string) iter.next (); System.out.print (val+""); } system.out.println (); -ผลการทำงาน:
1 2 3 4 5
ตำแหน่งของ 2 คือ: 4
1 2 3 4
มอง: 4
1 2 3 4
1 2 3 4