Stack ใน Java เป็นโครงสร้างข้อมูลแบบ Last-In-First-Out (LIFO) รายการที่เพิ่มล่าสุดจะถูกนำออกก่อน ขยายมาจากคลาส Vector
แนวคิด Stack
เหมือนกองหนังสือ: วางทับกัน ดูจากบนลงล่าง ตัวบนสุด = รายการล่าสุด = นำออกก่อน
ตัวอย่างจริง: ประวัติเว็บเบราว์เซอร์ (Back button)
สร้าง Stack ใน Java
import java.util.Stack; Stack<DataType> stackName = new Stack<>(); // ตัวอย่าง: Stack เก็บชื่อหนังสือ Stack<String> books = new Stack<>();
เมธอดหลักของ Stack
push() - เพิ่มข้อมูล
books.push("Pride and Prejudice");
books.push("Nineteen Eighty-Four");
books.push("The Great Gatsby");
// [Pride and Prejudice, Nineteen Eighty-Four, The Great Gatsby]
pop() - นำข้อมูลบนสุดออก
String removed = books.pop(); // นำ "The Great Gatsby" ออก // Books: [Pride and Prejudice, Nineteen Eighty-Four] // Removed book: The Great Gatsby
peek() - ดูข้อมูลบนสุด (ไม่เอาออก)
String top = books.peek(); // "Nineteen Eighty-Four"
empty() - ตรวจสอบว่าว่างหรือไม่
boolean isEmpty = books.empty(); // false
search() - ค้นหาตำแหน่งข้อมูล
int pos = books.search("Pride and Prejudice"); // 1 (ตำแหน่งเริ่มจาก 1)
Deque vs Stack
Deque (Double-ended queue) เพิ่ม/ลบได้ทั้งสองข้าง ยืดหยุ่นกว่า Stack บางกรณีแนะนำให้ใช้ Deque แทน
สรุป
Stack เหมาะสำหรับงานที่ต้องการ LIFO เช่น Undo/Redo, Expression evaluation, Backtracking ใช้เมธอด push, pop, peek, empty, search จัดการข้อมูล