แหล่งที่มาของบทความ: อินเทอร์เน็ต ผู้แต่ง: PaleSting/CSDN
ในบทความนี้ เราจะดูประเภทข้อมูลใน Java แต่เราจะแนะนำแนวคิดของประเภทข้อมูลนามธรรม (ADT) นอกจากนี้เรายังจะได้เรียนรู้เกี่ยวกับ ADT บางส่วนที่กำหนดโดย Java โดยการแนะนำ Java Collections Framework
เอดีที
ADT ถูกกำหนดโดยประเภทข้อมูลที่มีอยู่และการดำเนินการที่อาจดำเนินการกับประเภทข้อมูลนี้เท่านั้น นักพัฒนาสามารถเข้าถึงคุณสมบัติของ ADT ผ่านวิธีการทำงานของ ADT เท่านั้น และพวกเขาจะไม่ทราบว่าการดำเนินการต่างๆ ภายในประเภทข้อมูลนี้ถูกนำไปใช้อย่างไร
ใน Java เรามักจะใช้อินเทอร์เฟซเพื่อจัดเตรียมชุดการดำเนินการโดยไม่เปิดเผยรายละเอียดของการดำเนินการเหล่านี้ โปรดจำไว้ว่าอินเทอร์เฟซกำหนดชุดของวิธีการและคลาส Java ต้องใช้ชุดนี้เพื่อให้เป็นไปตามเงื่อนไขบังคับหรือใช้อินสแตนซ์ของอินเทอร์เฟซ
ตารางเชิงเส้น สแต็ก และคิว
เมื่อเราพูดถึง ADT เรามักจะพูดถึงรายการเชิงเส้น สแต็ก และคิว เราจะไม่พูดถึงรายละเอียดของโครงสร้างข้อมูลเหล่านี้ แต่เราจะพูดถึงว่าทำไมจึงเรียกว่า ADT
รายการเชิงเส้นคือชุดขององค์ประกอบจำกัดที่จัดเรียงในลักษณะเชิงเส้นและให้การเข้าถึงองค์ประกอบโดยตรง สแต็กเป็นรายการเชิงเส้นแบบเข้าก่อนออกก่อน (LIFO) ซึ่งจะถูกเพิ่มและลบออกจากส่วนหัวของสแต็ก คิวเป็นรายการเชิงเส้นแบบเข้าก่อนออกก่อน องค์ประกอบต่างๆ จะถูกเพิ่มจากจุดสิ้นสุดของคิวและนำมาจากส่วนหัวของคิว
โครงสร้างภายในของรายการเชิงเส้น สแต็ก และคิวสามารถนำไปใช้ได้หลายวิธี ตัวอย่างเช่น เราสามารถใช้อาร์เรย์ที่เรียงลำดับหรือรายการเชื่อมโยงเพื่อใช้แต่ละโครงสร้าง ประเด็นสำคัญคือไม่ว่าคุณจะใช้โครงสร้างภายในอย่างไร อินเทอร์เฟซภายนอกจะยังคงเหมือนเดิมเสมอ สิ่งนี้ช่วยให้คุณสามารถแก้ไขหรืออัพเกรดการใช้งานพื้นฐานโดยไม่ต้องเปลี่ยนอินเทอร์เฟซสาธารณะ
สถาปัตยกรรมคอลเลกชัน Java
ชุดพัฒนาซอฟต์แวร์ Java 2 (SDK) มีคลาสใหม่เพื่อรองรับ ADT ที่ใช้บ่อยที่สุด คลาสเหล่านี้เรียกว่าคลาสคอลเลกชัน Java (คล้ายกับคลาสคอลเลกชันใน MFC) และทำงานร่วมกันเพื่อสร้างสถาปัตยกรรมคอลเลกชัน Java สถาปัตยกรรมคอลเลกชันนี้จัดเตรียมชุดอินเทอร์เฟซและคลาสที่แสดงข้อมูลที่เรียกว่าข้อมูลนามธรรมของคอลเลกชัน
อินเทอร์เฟซ java.util.Collection ใช้เพื่อแสดงกลุ่มของอ็อบเจ็กต์ใดๆ นั่นคือองค์ประกอบ อินเทอร์เฟซนี้มีการดำเนินการพื้นฐาน เช่น การเพิ่ม ลบ และแบบสอบถาม อินเทอร์เฟซคอลเลกชันยังมีวิธีการวนซ้ำอีกด้วย วิธีการวนซ้ำส่งคืนอินสแตนซ์ของอินเทอร์เฟซ java.util.Iterator อินเทอร์เฟซ Iterator มีเมธอด hasNext, Next และ Remove เมื่อใช้วิธีการที่มีให้โดยอินเทอร์เฟซตัววนซ้ำ คุณสามารถวนซ้ำอินสแตนซ์ในออบเจ็กต์คอลเลกชันตั้งแต่ต้นจนจบ และลบองค์ประกอบที่แสดงโดยตัววนซ้ำ (เคอร์เซอร์) ได้อย่างปลอดภัย
java.util.AbstractCollection เป็นพื้นฐานสำหรับคลาสสถาปัตยกรรมคอลเลกชันทั้งหมด คลาส AbstractCollection จัดให้มีการใช้งานเมธอดทั้งหมดในอินเทอร์เฟซ java.util.Collection ยกเว้นเมธอดตัววนซ้ำและขนาด วิธีการยกเว้นทั้งสองนี้ถูกนำไปใช้โดยคลาสย่อยทั้งหมดที่สืบทอด java.util.AbstractCollection
คลาสที่ใช้อินเทอร์เฟซจะต้องจัดให้มีการใช้งานวิธีอินเทอร์เฟซทั้งหมด เนื่องจากวิธีการอินเทอร์เฟซบางอย่างในสถาปัตยกรรมการรวบรวมเป็นทางเลือก จะต้องมีวิธีแจ้งผู้เรียกว่าวิธีการบางอย่างไม่ได้ถูกนำมาใช้ เมื่อมีการใช้วิธีการทางเลือกและไม่ได้ใช้วิธีการนี้ UnsupportedOperationException จะถูกส่งออกไป คลา UnsupportedOperationException สืบทอดคลา RuntimeException สิ่งนี้ทำให้ผู้เรียกสามารถเรียกการดำเนินการรวบรวมทั้งหมดโดยไม่ต้องวางการโทรแต่ละครั้งในคู่ลองจับ
แสดงรายการตารางเชิงเส้น
อินเทอร์เฟซรายการสืบทอดอินเทอร์เฟซคอลเลกชันและกำหนดคอลเลกชันที่เรียงลำดับซึ่งอนุญาตให้มีองค์ประกอบที่เหมือนกันได้ อินเทอร์เฟซรายการยังเพิ่มวิธีการที่ใช้ค่าดัชนีตัวเลขเพื่อดำเนินการกับองค์ประกอบในคอลเลกชันตามตำแหน่งขององค์ประกอบในรายการเชิงเส้น การดำเนินการเหล่านี้ได้แก่ เพิ่ม รับ ตั้งค่า และลบ
อินเทอร์เฟซรายการยังมีเมธอด listIterator อีกด้วย เมธอดนี้ส่งคืนอินสแตนซ์ของอินเทอร์เฟซ java.util.ListIterator ซึ่งอนุญาตให้คุณสำรวจรายการเชิงเส้นตั้งแต่ต้นจนจบหรือตั้งแต่ต้นจนจบ java.util.ListIterator สืบทอดอินเทอร์เฟซ java.util.Iterator ดังนั้นจึงรองรับการเพิ่มและแก้ไของค์ประกอบในคอลเลกชันที่เป็นตัวแทน
ตัวอย่างต่อไปนี้สาธิตวิธีการสำรวจองค์ประกอบของรายการจากหลังไปหน้า เพื่อให้บรรลุเป้าหมายนี้ ListIterator จะต้องอยู่ในตำแหน่งหลังองค์ประกอบสุดท้ายของรายการก่อนที่จะเริ่มการข้ามผ่าน
ListIterator iter = aList.listIterator(aList.size());
ในขณะที่ (iter.hasPrevious())
System.out.println(iter.previous().toString());
-
สถาปัตยกรรมคอลเลกชันมีการใช้งานอินเทอร์เฟซรายการสองแบบ: LinkedList (รายการที่เชื่อมโยง) และ ArrayList (รายการอาร์เรย์ ซึ่งก็คือ รายการแบบคงที่) การใช้งานทั้งสองรองรับการเข้าถึงองค์ประกอบแบบสุ่ม อินสแตนซ์ ArrayList รองรับการดำเนินการแบบอาร์เรย์และรองรับการดำเนินการปรับขนาดอาร์เรย์ อินสแตนซ์ของ LinkedList ให้การสนับสนุนที่ชัดเจนในการเพิ่ม ลบ และจัดเตรียมองค์ประกอบที่จุดเริ่มต้นและจุดสิ้นสุดของรายการ เมื่อใช้วิธีการใหม่เหล่านี้ โปรแกรมเมอร์สามารถใช้ LinedList เป็นสแต็กหรือคิวได้ ดังต่อไปนี้:
LinkedList aQueue = LinkedList ใหม่ (aCollection);
aQueue.addFirst(องค์ประกอบใหม่);
วัตถุ anElement = aQueue.removeLast();
LinkedList aStack = LinkedList ใหม่ (aCollection);
aStack.addFirst(องค์ประกอบใหม่);
วัตถุ anElement= aStack.removeFirst();
ข้อมูลโค้ดในตาราง A สาธิตการดำเนินการทั่วไปบางอย่างในอินสแตนซ์การใช้งานของอินเทอร์เฟซ java.util.List โดยใช้ java.util.ArrayList และ java.util.LinkedList การดำเนินการเหล่านี้รวมถึงการเพิ่มองค์ประกอบ การเข้าถึงองค์ประกอบแบบสุ่ม และการลบองค์ประกอบออกจากส่วนท้ายของรายการอย่างชัดเจน
การรู้ว่าเกิดอะไรขึ้นและไม่รู้ว่าทำไมจึงมีประโยชน์อย่างมาก
ADT จัดเตรียมเครื่องมือที่มีประสิทธิภาพสำหรับการแยกการดำเนินการในส่วนต่อประสานสาธารณะของออบเจ็กต์ออกจากการใช้งานที่เป็นรูปธรรม สิ่งนี้ทำให้การใช้งาน ADT สามารถเปลี่ยนแปลงและพัฒนาได้ในขณะที่รักษาส่วนต่อประสานสาธารณะไว้ไม่เปลี่ยนแปลง สถาปัตยกรรมคอลเลกชัน Java มีอินเทอร์เฟซและการใช้งานจำนวนมากที่แสดงถึงคอลเลกชันขององค์ประกอบพื้นฐาน และสามารถใช้เพื่อสร้าง ADT ที่มีประโยชน์