Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

Java Stack Class

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 มีหลายวิธีที่คุณสามารถใช้เพื่อจัดการข้อมูลที่จัดเก็บไว้ในสแต็ก วิธีการเหล่านี้สามารถแบ่งออกเป็นสองประเภทดังต่อไปนี้:

  1. เมธอดสแต็กที่สืบทอดมาจากคลาสเวกเตอร์ วิธีแรกข้อเสนอสแต็คเป็นวิธีที่สืบทอดมาจากคลาสเวกเตอร์ หากคุณต้องการเรียนรู้เพิ่มเติมเกี่ยวกับวิธีการเหล่านี้ ให้ค้นคว้าเรื่อง "คลาสเวกเตอร์ Java"
  1. เมธอดของสแต็กที่ไม่เหมือนใคร 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