Java - กรอบงานคอลเลกชัน

ก่อนหน้า Java 2 Java จัดเตรียมคลาสเฉพาะกิจเช่น Dictionary, Vector, Stack, และ Propertiesเพื่อจัดเก็บและจัดการกลุ่มของวัตถุ แม้ว่าชั้นเรียนเหล่านี้จะมีประโยชน์มาก แต่ก็ยังขาดแก่นกลางที่เป็นหนึ่งเดียว ดังนั้นวิธีที่คุณใช้ Vector จึงแตกต่างจากวิธีที่คุณใช้คุณสมบัติ

กรอบการรวบรวมได้รับการออกแบบมาเพื่อให้บรรลุเป้าหมายหลายประการเช่น -

  • เฟรมเวิร์กต้องมีประสิทธิภาพสูง การนำไปใช้สำหรับคอลเลกชันพื้นฐาน (อาร์เรย์แบบไดนามิกรายการที่เชื่อมโยงต้นไม้และแฮชแท็ก) จะต้องมีประสิทธิภาพสูง

  • กรอบงานต้องอนุญาตให้คอลเลกชันประเภทต่างๆทำงานในลักษณะที่คล้ายคลึงกันและมีความสามารถในการทำงานร่วมกันได้ในระดับสูง

  • กรอบต้องขยายและ / หรือปรับเปลี่ยนคอลเล็กชันได้ง่าย

ในตอนท้ายนี้เฟรมเวิร์กคอลเลกชันทั้งหมดได้รับการออกแบบโดยใช้อินเทอร์เฟซมาตรฐานชุดหนึ่ง การใช้งานมาตรฐานหลายอย่างเช่นLinkedList, HashSet, และ TreeSetอินเทอร์เฟซเหล่านี้มีไว้เพื่อให้คุณสามารถใช้ตามที่เป็นอยู่และคุณสามารถใช้คอลเลคชันของคุณเองได้หากคุณเลือก

เฟรมเวิร์กคอลเลกชันเป็นสถาปัตยกรรมแบบรวมสำหรับการแสดงและจัดการคอลเลกชัน กรอบคอลเลกชันทั้งหมดประกอบด้วยสิ่งต่อไปนี้ -

  • Interfaces- เป็นประเภทข้อมูลนามธรรมที่แสดงถึงคอลเล็กชัน อินเทอร์เฟซช่วยให้สามารถจัดการคอลเล็กชันได้โดยไม่ขึ้นกับรายละเอียดของการนำเสนอ ในภาษาเชิงวัตถุโดยทั่วไปอินเทอร์เฟซจะสร้างลำดับชั้น

  • Implementations, i.e., Classes- นี่คือการนำอินเทอร์เฟซการรวบรวมมาใช้อย่างเป็นรูปธรรม โดยพื้นฐานแล้วเป็นโครงสร้างข้อมูลที่ใช้ซ้ำได้

  • Algorithms- วิธีเหล่านี้เป็นวิธีการคำนวณที่มีประโยชน์เช่นการค้นหาและการเรียงลำดับบนวัตถุที่ใช้อินเทอร์เฟซการรวบรวม อัลกอริทึมถูกกล่าวว่าเป็นความหลากหลายนั่นคือสามารถใช้วิธีการเดียวกันกับการใช้งานอินเทอร์เฟซการรวบรวมที่เหมาะสมได้หลายแบบ

นอกจากคอลเล็กชันแล้วเฟรมเวิร์กยังกำหนดอินเตอร์เฟสแผนที่และคลาสต่างๆ แผนที่เก็บคู่คีย์ / ค่า แม้ว่าแผนที่จะไม่ใช่คอลเล็กชันในการใช้คำศัพท์ที่เหมาะสม แต่ก็รวมเข้ากับคอลเล็กชันได้อย่างสมบูรณ์

อินเทอร์เฟซการรวบรวม

เฟรมเวิร์กคอลเลกชันกำหนดอินเทอร์เฟซต่างๆ ส่วนนี้ให้ภาพรวมของแต่ละอินเทอร์เฟซ -

ซีเนียร์ อินเทอร์เฟซและคำอธิบาย
1 อินเทอร์เฟซการรวบรวม

สิ่งนี้ช่วยให้คุณสามารถทำงานกับกลุ่มของวัตถุ อยู่ที่ด้านบนสุดของลำดับชั้นคอลเลกชัน

2 อินเทอร์เฟซรายการ

สิ่งนี้ขยายออกไป Collection และอินสแตนซ์ของรายการจะจัดเก็บชุดองค์ประกอบตามลำดับ

3 ชุด

สิ่งนี้ขยายคอลเล็กชันเพื่อจัดการกับชุดซึ่งต้องมีองค์ประกอบที่ไม่ซ้ำกัน

4 SortedSet

สิ่งนี้ขยาย Set เพื่อจัดการชุดที่เรียงลำดับ

5 แผนที่

การจับคู่คีย์ที่ไม่ซ้ำกับค่านี้

6 แผนที่รายการ

สิ่งนี้อธิบายองค์ประกอบ (คู่คีย์ / ค่า) ในแผนที่ นี่คือคลาสภายในของแผนที่

7 SortedMap

สิ่งนี้จะขยายแผนที่เพื่อให้คีย์คงอยู่ในลำดับจากน้อยไปมาก

8 การแจงนับ

นี่คืออินเทอร์เฟซแบบดั้งเดิมกำหนดวิธีการที่คุณสามารถแจกแจงองค์ประกอบ (รับทีละรายการ) ในชุดของวัตถุ อินเทอร์เฟซแบบเดิมนี้ถูกควบคุมโดย Iterator

คลาสคอลเลกชัน

Java จัดเตรียมชุดของคลาสคอลเลกชันมาตรฐานที่ใช้อินเตอร์เฟส Collection บางคลาสมีการใช้งานแบบเต็มรูปแบบที่สามารถใช้ได้ตามที่เป็นอยู่และคลาสอื่น ๆ เป็นคลาสนามธรรมโดยมีการใช้งานโครงร่างที่ใช้เป็นจุดเริ่มต้นสำหรับการสร้างคอลเลกชันที่เป็นรูปธรรม

คลาสคอลเลกชันมาตรฐานสรุปไว้ในตารางต่อไปนี้ -

ซีเนียร์ ชั้นเรียนและคำอธิบาย
1

AbstractCollection

ใช้งานอินเทอร์เฟซ Collection ส่วนใหญ่

2

AbstractList

ขยาย AbstractCollection และใช้ส่วนต่อประสานรายการส่วนใหญ่

3

AbstractSequentialList

ขยาย AbstractList เพื่อใช้โดยคอลเลกชันที่ใช้ตามลำดับแทนที่จะเข้าถึงแบบสุ่มขององค์ประกอบ

4 LinkedList

ใช้รายการที่เชื่อมโยงโดยการขยาย AbstractSequentialList

5 ArrayList

ใช้อาร์เรย์แบบไดนามิกโดยการขยาย AbstractList

6

AbstractSet

ขยาย AbstractCollection และใช้งานส่วนต่อประสาน Set ส่วนใหญ่

7 แฮชเซ็ต

ขยาย AbstractSet เพื่อใช้กับตารางแฮช

8 LinkedHashSet

ขยาย HashSet เพื่อให้สามารถทำซ้ำตามลำดับการแทรก

9 ทรีเซ็ต

ใช้ชุดที่เก็บไว้ในต้นไม้ ขยาย AbstractSet

10

AbstractMap

ใช้ส่วนต่อประสานแผนที่ส่วนใหญ่

11 HashMap

ขยาย AbstractMap เพื่อใช้ตารางแฮช

12 TreeMap

ขยาย AbstractMap เพื่อใช้ต้นไม้

13 WeakHashMap

ขยาย AbstractMap เพื่อใช้ตารางแฮชที่มีคีย์ที่อ่อนแอ

14 LinkedHashMap

ขยาย HashMap เพื่ออนุญาตให้มีการทำซ้ำลำดับการแทรก

15 IdentityHashMap

ขยาย AbstractMap และใช้ความเท่าเทียมกันในการอ้างอิงเมื่อเปรียบเทียบเอกสาร

AbstractCollection, AbstractSet, AbstractList, AbstractSequentialListและAbstractMapเรียนให้การใช้งานโครงกระดูกคอลเลกชันของอินเตอร์เฟซหลักเพื่อลดความจำเป็นในการใช้พวกเขา

คลาสดั้งเดิมต่อไปนี้ที่กำหนดโดย java.util ได้ถูกกล่าวถึงในบทที่แล้ว -

ซีเนียร์ ชั้นเรียนและคำอธิบาย
1 เวกเตอร์

สิ่งนี้ใช้อาร์เรย์แบบไดนามิก คล้ายกับ ArrayList แต่มีความแตกต่างบางประการ

2 ซ้อนกัน

Stack เป็นคลาสย่อยของ Vector ที่ใช้สแต็กแบบ last-in, first-out มาตรฐาน

3 พจนานุกรม

พจนานุกรมเป็นคลาสนามธรรมที่แสดงถึงที่เก็บคีย์ / ค่าและทำงานเหมือนกับแผนที่

4 Hashtable

Hashtable เป็นส่วนหนึ่งของ java.util ดั้งเดิมและเป็นการนำพจนานุกรมไปใช้อย่างเป็นรูปธรรม

5 คุณสมบัติ

คุณสมบัติเป็นคลาสย่อยของ Hashtable ใช้เพื่อรักษารายการของค่าที่คีย์เป็น String และค่านี้ยังเป็น String

6 BitSet

คลาส BitSet สร้างอาร์เรย์ชนิดพิเศษที่เก็บค่าบิต อาร์เรย์นี้สามารถเพิ่มขนาดได้ตามต้องการ

อัลกอริทึมการรวบรวม

เฟรมเวิร์กคอลเลกชันกำหนดอัลกอริทึมต่างๆที่สามารถนำไปใช้กับคอลเลกชันและแผนที่ อัลกอริทึมเหล่านี้ถูกกำหนดให้เป็นวิธีการแบบคงที่ภายในคลาส Collections

หลายวิธีสามารถโยนไฟล์ ClassCastExceptionซึ่งเกิดขึ้นเมื่อมีการพยายามเปรียบเทียบประเภทที่เข้ากันไม่ได้หรือไฟล์ UnsupportedOperationExceptionซึ่งเกิดขึ้นเมื่อมีความพยายามที่จะแก้ไขคอลเลกชันที่ไม่สามารถแก้ไขได้

คอลเล็กชันกำหนดตัวแปรแบบคงที่สามตัวแปร: EMPTY_SET, EMPTY_LIST และ EMPTY_MAP ทั้งหมดไม่เปลี่ยนรูป

ซีเนียร์ อัลกอริทึมและคำอธิบาย
1 อัลกอริทึมการรวบรวม

นี่คือรายการของการใช้อัลกอริทึมทั้งหมด

จะใช้ Iterator ได้อย่างไร?

บ่อยครั้งคุณจะต้องการหมุนเวียนองค์ประกอบต่างๆในคอลเล็กชัน ตัวอย่างเช่นคุณอาจต้องการแสดงแต่ละองค์ประกอบ

วิธีที่ง่ายที่สุดในการดำเนินการนี้คือการใช้ตัววนซ้ำซึ่งเป็นอ็อบเจ็กต์ที่ใช้อินเทอร์เฟซ Iterator หรือ ListIterator

Iterator ช่วยให้คุณวนรอบคอลเลกชันรับหรือลบองค์ประกอบ ListIterator ขยาย Iterator เพื่ออนุญาตการส่งผ่านรายการแบบสองทิศทางและการปรับเปลี่ยนองค์ประกอบ

ซีเนียร์ วิธีการและคำอธิบาย Iterator
1 ใช้ Java Iterator

นี่คือรายการของวิธีการทั้งหมดพร้อมตัวอย่างที่จัดเตรียมโดยอินเทอร์เฟซ Iterator และ ListIterator

จะใช้เครื่องเปรียบเทียบได้อย่างไร?

ทั้ง TreeSet และ TreeMap จัดเก็บองค์ประกอบตามลำดับที่เรียงกัน แต่ก็เป็นตัวเปรียบเทียบที่กำหนดสิ่งที่แม่นยำเรียงเพื่อหมายถึง

อินเทอร์เฟซนี้ช่วยให้เราสามารถจัดเรียงคอลเล็กชันที่กำหนดได้หลายวิธี นอกจากนี้ยังสามารถใช้อินเทอร์เฟซนี้เพื่อจัดเรียงอินสแตนซ์ของคลาสใดก็ได้ (แม้แต่คลาสที่เราไม่สามารถแก้ไขได้)

ซีเนียร์ วิธีการและคำอธิบาย Iterator
1 ใช้ Java Comparator

นี่คือรายการของวิธีการทั้งหมดพร้อมตัวอย่างที่มีให้โดย Comparator Interface

สรุป

เฟรมเวิร์กคอลเลกชัน Java ช่วยให้โปรแกรมเมอร์สามารถเข้าถึงโครงสร้างข้อมูลที่จัดเตรียมไว้ล่วงหน้าตลอดจนอัลกอริทึมสำหรับจัดการโครงสร้างเหล่านี้

คอลเลกชันคือวัตถุที่สามารถเก็บข้อมูลอ้างอิงไปยังวัตถุอื่น ๆ อินเทอร์เฟซการรวบรวมประกาศการดำเนินการที่สามารถดำเนินการกับคอลเล็กชันแต่ละประเภท

คลาสและอินเทอร์เฟซของเฟรมเวิร์กคอลเลกชันอยู่ในแพ็คเกจ java.util