Java stack เป็นโครงสร้างข้อมูลเข้าก่อนออกก่อน รายการแรกที่นำออกจากสแต็กคือรายการสุดท้ายที่เพิ่มลงในสแต็ก โครงสร้างข้อมูลสแต็กเพิ่มรายการใหม่ต่อท้ายสแต็ก Java stacks ขยายคลาส Vector
ในการเขียนโปรแกรม สแตกเป็นโครงสร้างข้อมูลเข้าก่อนออกก่อนที่ใช้ในการจัดเก็บข้อมูล สแต็คมีประโยชน์ในหลายกรณี ตัวอย่างเช่น หากคุณต้องการทดสอบสมมาตรในรายการหรือกลับลำดับของรายการ คุณสามารถใช้สแต็กได้
กรอบงานการรวบรวม Java มีคลาสที่เรียกว่า stack ที่ใช้สร้าง stack ใน Java บทช่วยสอนนี้จะกล่าวถึงพื้นฐานของสแต็กใน Java วิธีสร้างสแต็ก และวิธีการหลักที่คลาสสแต็กนำเสนอ เราจะอ้างอิงถึงตัวอย่างเพื่อส่งเสริมการทำงานของคลาสสแต็ก
จาวาสแต็ค
สแต็ก Java เก็บองค์ประกอบในโครงสร้างเข้าก่อนออกก่อน (LIFO) ซึ่งหมายความว่าองค์ประกอบที่เพิ่มไปที่ด้านบนของสแต็กจะเป็นองค์ประกอบแรกที่ถูกลบออกจากสแต็ก
ตัวอย่างหนึ่งของสแต็กในการเขียนโปรแกรมคือคุณลักษณะการควบคุมหน้าของเว็บเบราว์เซอร์ เมื่อคุณเยี่ยมชมหน้าเว็บ เว็บเบราว์เซอร์ของคุณจะเพิ่มลงในบันทึกของหน้าที่เยี่ยมชม บันทึกนี้เป็นสแต็ก
ทุกครั้งที่คุณเยี่ยมชมหน้าเว็บใหม่ระหว่างเซสชันการเรียกดู เบราว์เซอร์ของคุณจะเพิ่มรายการใหม่ลงในกลุ่มการเรียกดู หากคุณต้องการกลับไปยังหน้าสุดท้ายที่คุณเยี่ยมชม (last-in ) เบราว์เซอร์ของคุณจะลบรายการล่าสุดออกจากสแต็กก่อน (ออกก่อน ). นี่คือตารางที่แสดงตัวอย่างสแต็ก:
ชื่อไซต์ |
google.com |
nytimes.com |
careerkarma.com |
นี่คือสแต็คประวัติการท่องเว็บของเรา ขณะนี้เราอยู่ที่หน้าหลักของ google.com ก่อนถึงหน้า google.com เราอยู่ที่ New York Times หน้าหลัก. ก่อนหน้านั้นเราอยู่ในหน้าหลักของ Career Karma
google.com อยู่ที่ด้านบนสุดของสแต็ก ไซต์ google.com จะเป็นรายการแรกที่เบราว์เซอร์ของเรานำออกจากสแต็ก สิ่งนี้จะเกิดขึ้นเมื่อเรากดปุ่มลูกศรย้อนกลับเพื่อกลับไปยังหน้าสุดท้ายที่เราเข้าชม
81% ของผู้เข้าร่วมกล่าวว่าพวกเขารู้สึกมั่นใจมากขึ้นเกี่ยวกับโอกาสในการทำงานด้านเทคโนโลยีหลังจากเข้าร่วม bootcamp จับคู่กับ Bootcamp วันนี้
ผู้สำเร็จการศึกษาจากหลักสูตร bootcamp โดยเฉลี่ยใช้เวลาน้อยกว่าหกเดือนในการเปลี่ยนอาชีพ ตั้งแต่เริ่มต้น bootcamp ไปจนถึงหางานแรก
อีกตัวอย่างหนึ่งของการทำงานจริงของกองหนังสือคือกองหนังสือ (นึกถึง กอง ของหนังสือ!) หากคุณต้องการดูกองหนังสือ คุณจะไปจากหนังสือเล่มบนลงล่าง หนังสือเล่มสุดท้ายที่คุณเพิ่มลงในสแต็กจะเป็นหนังสือเล่มแรกที่คุณดู กล่าวคือ LIFO
เมื่อคุณทำงานกับสแต็ค รายการสุดท้ายในรายการจะถูกพิจารณาที่ บนสุดของสแต็ก . ในการใช้ตัวอย่างเว็บไซต์ของเราจากด้านบน google.com เป็นไซต์ล่าสุดที่เราเข้าชม จึงอยู่ที่ด้านบนสุดของกลุ่ม
สร้าง Java Stack
ก่อนที่เราจะสร้างสแต็กใน Java เราต้องนำเข้าแพ็คเกจ java.util.Stack แพ็คเกจนี้จัดเก็บโครงสร้างข้อมูลสแต็กที่เราจะใช้ในบทช่วยสอนนี้
วิธีนำเข้าโครงสร้างข้อมูลสแต็ก:
import java.util.Stack;
ตอนนี้เรานำเข้าแพ็คเกจสแต็กแล้ว เราสามารถสร้าง Java stack ได้ นี่คือไวยากรณ์ที่เราใช้สร้างสแต็กใน Java:
Stack<DataType> stack_name = new Stack<>();
นี่คือองค์ประกอบหลักของไวยากรณ์สแต็ก Java:
- กอง บอกโปรแกรมของเราว่าเราต้องการประกาศสแต็ก
- ประเภทข้อมูล คือประเภทของข้อมูลที่สแตกของเราจะจัดเก็บ
- stack_name คือชื่อสแตกของเรา
- กองใหม่<>(); เริ่มต้น Java stack ใหม่
หากเราต้องการสร้างกองที่เรียกว่า books
ที่เก็บสตริง เราสามารถใช้รหัสนี้:
Stack<String> books = new Stack<>();
เราได้สร้างสแต็กใหม่ สแต็กนี้เก็บข้อมูลตามลำดับการเข้าออกก่อน
หมายเหตุเกี่ยวกับคลาส Deque
เป็นที่น่าสังเกตว่าโปรแกรมเมอร์บางคนต้องการใช้คลาส deque แทน stack ใน Java
Deques เป็นคิวแบบ double-ended ข้อดีของ deque บนสแต็กคือคุณสามารถเพิ่มและลบไอเท็มจากปลายทั้งสองของ deque คุณไม่สามารถทำเช่นนี้กับสแต็กได้
หากคุณใช้วิธีเฉพาะสแต็ก (อธิบายไว้ด้านล่าง) คุณจะต้องยอมรับการใช้คลาสสแต็กในโค้ดของคุณ ซึ่งจะทำให้ปรับขนาดโปรแกรมได้ยากขึ้น ที่กล่าวว่า stack ยังคงมีการใช้งานที่หลากหลายใน Java
วิธีการกอง Java
คลาสสแต็ก Java มีหลายวิธีที่คุณสามารถใช้เพื่อจัดการข้อมูลที่จัดเก็บไว้ในสแต็ก วิธีการเหล่านี้สามารถแบ่งออกเป็นสองประเภทดังต่อไปนี้:
- เมธอดสแต็กที่สืบทอดมาจากคลาสเวกเตอร์ วิธีแรกข้อเสนอสแต็คเป็นวิธีที่สืบทอดมาจากคลาสเวกเตอร์ หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับวิธีการเหล่านี้ ให้ค้นคว้าเรื่อง "คลาสเวกเตอร์ Java"
- เมธอดของสแต็กที่ไม่เหมือนใคร Stack ยังมีวิธีการเพิ่มเติมอีกห้าวิธีที่ไม่เหมือนใครในชั้นเรียน เราจะพูดถึงพวกเขาด้านล่าง คือ:
- ดัน()
- ป๊อป()
- แอบดู()
- ว่างเปล่า()
- ค้นหา()
การดำเนินการ push() และ pop() มักใช้กันมากที่สุด ช่วยให้คุณเพิ่มและลบรายการออกจากกองได้ตามลำดับ
เพิ่มรายการไปยัง Java Stack:push()
ดัน() วิธีการเพิ่มรายการลงใน Java stack
ดัน() ยอมรับหนึ่งพารามิเตอร์:รายการที่คุณต้องการเพิ่มลงในสแต็กของคุณ ตัวอย่างเช่น สมมติว่าเรากำลังสร้างสแต็กที่เก็บชื่อหนังสือทั้งหมดไว้ในส่วนนิยายของห้องสมุด เราสามารถใช้รหัสนี้เพื่อเพิ่มชื่อหนังสือสามเล่มแรกลงในกอง:
import java.util.Stack; class AddBooks { public static void main(String[] args) { Stack<String> books = new Stack<>(); books.push("Pride and Prejudice"); books.push("Nineteen Eighty-Four"); books.push("The Great Gatsby"); System.out.println(books); } }
รหัสของเราส่งคืน:
[Pride and Prejudice, Nineteen Eighty-Four, The Great Gatsby]
ขั้นแรก เรานำเข้า Java stack module จากนั้นเราก็ประกาศคลาสที่เรียกว่า AddBooks —ที่เก็บรหัสสำหรับโปรแกรมของเรา
ในบรรทัดถัดไป เราเริ่มต้นสแต็กใหม่ที่เรียกว่า books - ที่สามารถเก็บค่าสตริงได้ จากนั้นเราก็ใช้ push() วิธีเพิ่มชื่อหนังสือสามเล่มลงในกองของเรา:ความภาคภูมิใจและความอยุติธรรม , สิบเก้าแปดสิบสี่ , และ เดอะ เกรท แกสบี้ . สุดท้าย เราพิมพ์ชื่อหนังสือใน หนังสือ . ของเรา สแต็คไปที่คอนโซล
ลบรายการออกจาก Java Stack:pop()
pop()
วิธีลบองค์ประกอบออกจากด้านบนของสแต็ก เมธอดนี้ส่งคืนองค์ประกอบที่คุณลบออกจากสแต็ก
สมมติว่าเราต้องการลบรายการสำหรับ The Great Gatsby . ออกจากกองของเรา ซึ่งเป็นชื่อหนังสือเล่มสุดท้ายที่เราป้อน เราสามารถเพิ่มโค้ดต่อไปนี้ในโปรแกรมของเราด้านบนเพื่อทำงานนี้ให้สำเร็จ:
class RemoveBooks { public static void main(String[] args) { Stack<String> books = new Stack<>(); books.push("Pride and Prejudice"); books.push("Nineteen Eighty-Four"); books.push("The Great Gatsby"); String removed_book = books.pop(); System.out.println("Books: " + books); System.out.println("Removed book: " + removed_book); } }
รหัสของเราส่งคืน:
Books: [Pride and Prejudice, Nineteen Eighty-Four] Removed book: The Great Gatsby
ในตัวอย่างนี้ รหัสของเราจะลบรายการที่ด้านบนของสแต็ก
รายการที่ด้านบนสุดของสแต็กคือ The Great Gatsby จากนั้น โปรแกรมของเราพิมพ์รายการหนังสือที่แก้ไขแล้วนำหน้าด้วย หนังสือ: ไปที่คอนโซล ชื่อหนังสือที่นำออกนำหน้าด้วย หนังสือที่ถูกนำออก: จะแสดงบนคอนโซลด้วย
ดึงออบเจ็กต์แรกในสแต็ก:peek()
เมื่อคุณทำงานกับสแต็ค คุณอาจต้องการดึงไอเท็มที่ด้านบนสุดของสแต็ค นั่นคือสิ่งที่ peek() เมธอดเข้ามา peek() ยอมรับไม่มีพารามิเตอร์ มัน แอบดู ที่ด้านบนของสแต็กและส่งคืนไอเท็มที่พบ
สมมติว่าเราต้องการค้นหาว่ารายการใดอยู่ที่ด้านบนสุดของกอง ตอนนี้เราได้ลบ The Great Gatsby แล้ว . เราสามารถใช้รหัสต่อไปนี้เพื่อดำเนินการดังกล่าว:
import java.util.Stack; class FindTopBook { public static void main(String[] args) { Stack<String> books = new Stack<>(); books.push("Pride and Prejudice"); books.push("Nineteen Eighty-Four"); String top_book = books.peek(); System.out.println("Book at top of stack: " + top_book); } }
รหัสของเราส่งคืน:
Book at top of stack: Nineteen Eighty-Four.
สแต็คของเรามีสองรายการ สิบเก้า แปดสิบสี่ อยู่ที่ด้านบนสุดของสแต็ก ดังนั้นเมื่อเราใช้ peek() เมธอด โปรแกรมของเราส่งคืนชื่อหนังสือนั้น
ตรวจสอบว่าสแต็กว่างเปล่าหรือไม่:empty()
empty() วิธีการกำหนดว่าสแต็กว่างเปล่าหรือไม่
ตัวอย่างเช่น สมมติว่าเราต้องการตรวจสอบว่า หนังสือของเรา สแต็กว่างเปล่า เราได้ลองเล่นกับข้อมูลในสแต็กของเราแล้ว ตอนนี้เราไม่แน่ใจว่าสแต็คมีชื่อหนังสืออีกหรือไม่
เราสามารถใช้รหัสต่อไปนี้เพื่อตรวจสอบว่า stack ของเราว่างเปล่าหรือไม่:
import java.util.Stack; class CheckBooksEmpty { public static void main(String[] args) { Stack<String> books = new Stack<>(); books.push("Pride and Prejudice"); books.push("Nineteen Eighty-Four"); String is_empty = books.empty(); System.out.println("Is the book stack empty? " + is_empty); } }
รหัสของเราส่งคืน:
Is the book stack empty? false
หนังสือของเรา stack มีค่าสองค่า ดังนั้นจึงไม่ว่างเปล่า ดังนั้น books.empty() คืนค่า:เท็จ
ค้นหาองค์ประกอบ:ค้นหา()
ค้นหา() วิธีค้นหาองค์ประกอบใน กอง
ค้นหา() ยอมรับหนึ่งพารามิเตอร์:ชื่อของรายการที่คุณต้องการค้นหา ส่งคืนตำแหน่งของรายการนั้นในสแต็ก
สมมติว่าเราต้องการหาตำแหน่งของ ความภาคภูมิใจและความอยุติธรรม ในชื่อหนังสือของเรา เราสามารถทำได้โดยใช้รหัสนี้:
import java.util.Stack; class FindPrideBookPosition { public static void main(String[] args) { Stack<String> books = new Stack<>(); books.push("Pride and Prejudice"); books.push("Nineteen Eighty-Four"); String find_book = books.search("Pride and Prejudice"); System.out.println("Position of 'Pride and Prejudice': " + find_book); } }
รหัสของเราส่งคืน:
Position of 'Pride and Prejudice': 1.
รายการแรกในกองมีหมายเลขตำแหน่ง 1 ,. เพราะ ความภาคภูมิใจและความอยุติธรรม เป็นรายการแรกในสแต็ก โปรแกรมของเราคืนค่า 1
บทสรุป
คลาสสแต็ก Java ใช้เพื่อสร้างสแต็กที่มีโครงสร้าง LIFO บทช่วยสอนนี้กล่าวถึงพื้นฐานของ Java stacks และวิธีสร้าง stack เรายังได้พูดคุยกันถึงห้าวิธีที่ใช้ในการดึงและจัดการเนื้อหาของสแต็ก
ตอนนี้คุณมีความรู้ที่จำเป็นในการทำงานกับสแต็คเหมือนนักพัฒนา Java มืออาชีพแล้ว คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับภาษาการเขียนโปรแกรม Java ได้โดยอ่านคู่มือ How to Learn Java