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