คอลเลกชัน Java เป็นชุดเครื่องมือที่จัดทำโดย Java ซึ่งมีโครงสร้างข้อมูลที่ใช้กันทั่วไป: คอลเลกชัน, รายการที่เชื่อมโยง, คิว, สแต็ค, อาร์เรย์, แผนที่ ฯลฯ ที่ตั้งของชุดเครื่องมือรวบรวม Java คือ java.util.*
คอลเลกชัน Java สามารถแบ่งออกเป็น 4 ส่วน: รายการรายการ, ชุดคอลเลกชัน, แผนที่แผนที่, คลาสเครื่องมือ (ตัววนซ้ำตัววนซ้ำ, คลาสการแจงนับการแจงนับ, อาร์เรย์และคอลเลกชัน)
กรอบชุดเครื่องมือรวบรวม Java แสดงอยู่ด้านล่าง
หมายเหตุ: ดูที่ไดอะแกรมเฟรมเวิร์กด้านบนให้จับลำตัวแรกคือคอลเลกชันและแผนที่
คอลเลกชันเป็นอินเทอร์เฟซคอลเลกชันที่เป็นนามธรรมสูงซึ่งมีการดำเนินการพื้นฐานและคุณสมบัติของคอลเลกชัน
คอลเลกชันประกอบด้วยสองสาขา: รายการและชุด
(01) รายการเป็นคิวที่สั่งซื้อและแต่ละองค์ประกอบมีดัชนี ค่าดัชนีขององค์ประกอบแรกคือ 0
คลาสการใช้งานรายการรวมถึง LinkedList, ArrayList, Vector, Stack
(02) Set เป็นคอลเลกชันที่ไม่อนุญาตให้มีองค์ประกอบที่ซ้ำกัน
การตั้งค่าคลาสการใช้งาน ได้แก่ Hastset และ Treeset HashSet อาศัย HashMap ซึ่งนำมาใช้จริงผ่าน HashMap; Treeet อาศัย TreeMap ซึ่งถูกนำไปใช้จริงผ่าน Treemap
MAP เป็นอินเทอร์เฟซการทำแผนที่คือคู่คีย์-ค่าคีย์ แต่ละองค์ประกอบในแผนที่มี "คีย์" และ "ค่าที่สอดคล้องกับคีย์"
AbstractMap เป็นคลาสนามธรรมที่ใช้ API ส่วนใหญ่ในอินเตอร์เฟส MAP HashMap, Treemap และ WeakhashMap ล้วนได้รับการสืบทอดมาจาก AbstractMap
ถึงแม้ว่าแฮชแต้มจะสืบทอดมาจากพจนานุกรม แต่ก็ใช้อินเทอร์เฟซแผนที่
ถัดไปมาดูตัววนซ้ำกันเถอะ มันเป็นเครื่องมือสำหรับการรวบรวมคอลเลกชันนั่นคือเรามักจะสำรวจคอลเลกชันผ่านตัววนซ้ำตัววนซ้ำ เราบอกว่าคอลเลกชันขึ้นอยู่กับตัววนซ้ำเนื่องจากคลาสการใช้งานของคอลเลกชันจะต้องใช้ฟังก์ชั่น iterator () และส่งคืนวัตถุตัววนซ้ำ
Listiterator มีอยู่โดยเฉพาะสำหรับรายการข้าม
มาดูการแจงนับอีกครั้งมันเป็นคลาสนามธรรมที่แนะนำโดย JDK 1.0 เช่นเดียวกับตัววนซ้ำมันยังสำรวจคอลเลกชัน; แต่การแจงนับมีฟังก์ชั่นน้อยกว่าตัววนซ้ำ ในแผนภาพบล็อกด้านบนการแจงนับสามารถใช้ในการแฮชช์, เวกเตอร์, สแต็คเท่านั้น
ในที่สุดดูอาร์เรย์และคอลเลกชัน พวกเขาเป็นสองคลาสเครื่องมือที่ใช้งานอาร์เรย์และคอลเลกชัน
ด้วยกรอบโดยรวมข้างต้นเราจะวิเคราะห์แต่ละชั้นแยกกัน
สถาปัตยกรรมคอลเลกชัน
ด้านล่างเราจะสรุปคอลเลกชัน มาดูไดอะแกรมความสัมพันธ์ของบางชั้นเรียนในการรวบรวม:
คอลเลกชันเป็นอินเทอร์เฟซและสองสาขาหลักคือ: รายการและชุด
รายการและชุดเป็นอินเทอร์เฟซและสืบทอดมาจากคอลเลกชัน รายการเป็นคิวที่สั่งซื้อและสามารถมีองค์ประกอบซ้ำในรายการ; ในขณะที่ชุดเป็นคอลเลกชันในแนวคิดทางคณิตศาสตร์และไม่มีองค์ประกอบซ้ำในชุด!
รายการและตั้งค่ามีคลาสการใช้งานของตนเอง
สำหรับการใช้งานง่ายคลาสนามธรรม AbstractCollection ถูกกำหนดไว้ในคอลเลกชันซึ่งใช้ฟังก์ชั่นส่วนใหญ่ในคอลเลกชัน ด้วยวิธีนี้ในคลาสการใช้งานคอลเลกชันเราสามารถบันทึกการเข้ารหัสซ้ำโดยการสืบทอดบทคัดย่อ AbstractList และ AbstractSet ทั้งคู่สืบทอดมาจาก AbstractCollection คลาสการใช้งานรายการที่เฉพาะเจาะจงมาจาก AbstractList และคลาสการใช้งานที่ตั้งอยู่นั้นสืบทอดมาจาก AbstractSet
นอกจากนี้ยังมีฟังก์ชั่น Iterator () ในคอลเลกชันซึ่งใช้เพื่อส่งคืนอินเทอร์เฟซตัววนซ้ำ โดยปกติเราสำรวจคอลเลกชันผ่านตัววนซ้ำ listiterator นั้นไม่ซ้ำกันกับอินเตอร์เฟสรายการ ในอินเทอร์เฟซรายการวัตถุ listiterator จะถูกส่งกลับผ่าน listiterator ()
จากนั้นมาดูการแนะนำของแต่ละอินเตอร์เฟสและคลาสนามธรรม จากนั้นเราจะมีความเข้าใจอย่างละเอียดเกี่ยวกับคลาสการใช้งาน
1. บทนำในการรวบรวม
คำจำกัดความของการรวบรวมมีดังนี้:
คอลเลกชันส่วนต่อประสานสาธารณะ <E> ขยาย ITERABLE <E> {} มันเป็นอินเทอร์เฟซคอลเลกชันที่เป็นนามธรรมสูงซึ่งมีการดำเนินการขั้นพื้นฐานของคอลเลกชัน: การเพิ่มการลบการล้างการสำรวจ (การอ่าน) ไม่ว่าจะว่างเปล่ารับขนาดไม่ว่าจะเป็นการป้องกันโดยองค์ประกอบที่แน่นอน ฯลฯ
คลาสย่อยทั้งหมดของอินเทอร์เฟซคอลเลกชัน (subclass โดยตรงและ subclass ทางอ้อม) จะต้องใช้สองตัวสร้าง: ตัวสร้างที่ไม่มีพารามิเตอร์และตัวสร้างด้วยการรวบรวมพารามิเตอร์ ตัวสร้างที่มีพารามิเตอร์สามารถใช้ในการแปลงประเภทของคอลเลกชัน
// คอลเลกชัน apiabstract บูลีนเพิ่ม (วัตถุ e) Addall บูลีนนามธรรม (คอลเลคชั่น <? ขยาย e> คอลเลกชัน) บทคัดย่อ void clear () นามธรรมบูลีนประกอบด้วย (วัตถุวัตถุ) บูลีนนามธรรมบรรจุ (คอลเลกชัน <?> คอลเลกชัน) Object) Abstract Boolean RemoveAll (คอลเลกชัน <?> คอลเลกชัน) Abstract Boolean retainall (คอลเลกชัน <?> คอลเลกชัน) ขนาด int บทคัดย่อ () บทคัดย่อ <t> t [] toarray (t [] อาร์เรย์) วัตถุนามธรรม [] toarray ()
2. บทนำสู่รายการ
คำจำกัดความของรายการมีดังนี้:
รายการอินเทอร์เฟซสาธารณะ <e> ขยายคอลเลกชัน <e> {} รายการเป็นอินเทอร์เฟซที่สืบทอดมาจากคอลเลกชันนั่นคือรายการเป็นประเภทของคอลเลกชัน รายการเป็นคิวที่สั่งซื้อและแต่ละองค์ประกอบในรายการมีดัชนี ค่าดัชนีขององค์ประกอบแรกคือ 0 และค่าดัชนีขององค์ประกอบที่ตามมา +1 ในทางกลับกัน ซึ่งแตกต่างจาก Set องค์ประกอบที่ซ้ำกันได้รับอนุญาตในรายการ การแนะนำอย่างเป็นทางการของรายการมีดังนี้:
รายการเป็นคอลเลกชันที่รักษาลำดับสำหรับองค์ประกอบของมัน ทุกองค์ประกอบในรายการมีดัชนี แต่ละองค์ประกอบสามารถเข้าถึงได้โดยดัชนีโดยดัชนีแรกเป็นศูนย์ โดยปกติรายการจะอนุญาตให้องค์ประกอบที่ซ้ำกันเมื่อเทียบกับชุดที่องค์ประกอบจะต้องไม่ซ้ำกัน
เกี่ยวกับ API เนื่องจากรายการสืบทอดมาจากอินเทอร์เฟซคอลเลกชันจึงมีอินเทอร์เฟซที่ใช้งานได้ทั้งหมดในคอลเลกชัน เนื่องจากรายการเป็นคิวที่สั่งซื้อจึงมีอินเทอร์เฟซ API ของตัวเอง สิ่งหลักรวมถึง "เพิ่มลบรับและแก้ไของค์ประกอบในตำแหน่งที่ระบุ", "รับ subqueues ในรายการ" ฯลฯ
// คอลเลกชัน apiabstract บูลีนเพิ่ม (วัตถุ e) Addall บูลีนนามธรรม (คอลเลคชั่น <? ขยาย e> คอลเลกชัน) บทคัดย่อ void clear () นามธรรมบูลีนประกอบด้วย (วัตถุวัตถุ) บูลีนนามธรรมบรรจุ (คอลเลกชัน <?> คอลเลกชัน) Object) Abstract Boolean RemoveAll (คอลเลกชัน <?> คอลเลกชัน) นามธรรมบูลีน retainall (คอลเลกชัน <?> คอลเลกชัน) ขนาด int บทคัดย่อ () บทคัดย่อ <t> t [] toarray (t [] อาร์เรย์) วัตถุนามธรรม [] toarray () // เทียบกับคอลเลกชัน สถานที่) บทคัดย่อ int indexof (วัตถุวัตถุ) บทคัดย่อ int lastindexof (วัตถุวัตถุ) บทคัดย่อ listiterator <e> listiterator (ตำแหน่ง int) บทคัดย่อ listiterator <e> listiterator () บทคัดย่อ e ลบ (ตำแหน่ง int) abstract e set (int location, e Object)
3. บทนำในการตั้งค่า
ชุดหมายถึงดังนี้:
ชุดอินเทอร์เฟซสาธารณะ <e> ขยายคอลเลกชัน <e> {} ชุดเป็นอินเทอร์เฟซที่สืบทอดมาจากคอลเลกชันนั่นคือชุดเป็นประเภทของคอลเลกชัน Set เป็นคอลเลกชันที่ไม่มีองค์ประกอบที่ซ้ำกัน
เกี่ยวกับ API API ของ Set นั้นเหมือนกับคอลเลกชัน
// set ของ apiabstract boolean เพิ่ม (วัตถุ e) Addall บูลีนนามธรรม (คอลเลคชั่น <? ขยาย e> คอลเลกชัน) โมฆะบทคัดย่อชัดเจน () บูลีนนามธรรมประกอบด้วย (วัตถุวัตถุ) บูลีนนามธรรมบรรจุ (คอลเลกชัน <?>) Object) Abstract Boolean RemoveAll (คอลเลกชัน <?> คอลเลกชัน) Abstract Boolean retainall (คอลเลกชัน <?> คอลเลกชัน) ขนาด int บทคัดย่อ () บทคัดย่อ <t> t [] toarray (t [] อาร์เรย์) วัตถุนามธรรม [] toarray ()
4. AbstractCollection
คำจำกัดความของบทคัดย่อมีดังนี้:
บทคัดย่อระดับสาธารณะ AbstractCollection <E> ใช้การรวบรวม <E> {} AbstractCollection เป็นคลาสนามธรรมที่ใช้ฟังก์ชั่นในคอลเลกชันยกเว้น Iterator () และขนาด ()
ฟังก์ชั่นหลักของ AbstractCollection: ใช้ฟังก์ชั่นส่วนใหญ่ในอินเทอร์เฟซคอลเลกชัน สิ่งนี้อำนวยความสะดวกในคลาสอื่น ๆ ในการใช้งานการรวบรวมเช่น ArrayList, LinkedList ฯลฯ หากคลาสเหล่านี้ต้องการใช้อินเทอร์เฟซคอลเลกชันส่วนใหญ่ของอินเตอร์เฟสได้ถูกนำไปใช้โดยการสืบทอดบทคัดย่อ
5. Abstractlist
คำจำกัดความของ AbstractList มีดังนี้:
บทคัดย่อระดับสาธารณะบทคัดย่อบทคัดย่อ <e> ขยายบทคัดย่อ abstractCollection <E> ดำเนินการรายการ <E> {} AbstractList เป็นคลาสนามธรรมที่สืบทอดมาจาก AbstractCollection และใช้อินเทอร์เฟซรายการ มันใช้ฟังก์ชั่นในรายการยกเว้นขนาด () และรับ (ตำแหน่ง int)
ฟังก์ชั่นหลักของ AbstractList: ใช้ฟังก์ชั่นส่วนใหญ่ในอินเตอร์เฟสรายการ สิ่งนี้อำนวยความสะดวกในชั้นเรียนอื่น ๆ เพื่อสืบทอดรายการ
นอกจากนี้เมื่อเปรียบเทียบกับบทคัดย่อการเชื่อมต่ออินเทอร์เฟซ Iterator () ถูกนำมาใช้ในคลาสนามธรรมนามธรรม
6. Abstractset
คำจำกัดความของ AbstractSet มีดังนี้: บทคัดย่อระดับนามธรรม AbstractSet <E> ขยายบทคัดย่อ <e> อุปกรณ์เสริม <e> {} AbstractSet เป็นคลาสนามธรรมที่สืบทอดมาจาก AbstractCollection และใช้อินเทอร์เฟซที่ตั้งไว้ เนื่องจากอินเทอร์เฟซ SET และ API ในอินเทอร์เฟซคอลเลกชันนั้นเหมือนกัน SET จึงไม่มี API แยกต่างหาก เช่น AbstractCollection มันใช้ฟังก์ชั่นในรายการยกเว้นตัววนซ้ำ () และขนาด ()
ฟังก์ชั่นหลักของ AbstractSet: ใช้ฟังก์ชั่นส่วนใหญ่ในส่วนต่อประสานที่ตั้งไว้ สิ่งนี้อำนวยความสะดวกในคลาสอื่น ๆ ในการใช้งานอินเทอร์เฟซที่ตั้งไว้
7. Iterator
คำจำกัดความของตัววนซ้ำมีดังนี้:
Iterator อินเตอร์เฟสสาธารณะ <E> {} Iterator เป็นอินเทอร์เฟซซึ่งเป็นตัววนซ้ำของคอลเลกชัน คอลเลกชันสามารถข้ามผ่านองค์ประกอบในคอลเลกชันผ่านตัววนซ้ำ อินเทอร์เฟซ API ที่จัดทำโดย Iterator รวมถึง: ไม่ว่าองค์ประกอบถัดไปจะได้รับองค์ประกอบถัดไปและลบองค์ประกอบปัจจุบัน
หมายเหตุ: เมื่อตัววนซ้ำสำรวจคอลเลกชันมันจะขึ้นอยู่กับกลไกที่ล้มเหลวอย่างรวดเร็ว นั่นคือเมื่อเธรดหนึ่งจะผ่านชุดผ่านตัววนซ้ำหากเนื้อหาของชุดเปลี่ยนโดยเธรดอื่น จากนั้นเมื่อเธรด A เข้าถึงชุดจะมีการโยนข้อยกเว้นพร้อมกันของการรับรู้พร้อมกันจะส่งผลให้เกิดเหตุการณ์ที่ล้มเหลวอย่างรวดเร็ว เกี่ยวกับเนื้อหาโดยละเอียดของ Fail-Fast เราจะอธิบายโดยเฉพาะหลังจากสรุปล้มเหลวอย่างรวดเร็ว
// apiabstract boolean ของ apiabstract hasnext () Abstract e Next () Void remove ()
8. Listiterator
คำจำกัดความของ listiterator มีดังนี้:
Interface Interface Listiterator <e> ขยายตัวเป็นตัววนซ้ำ <e> {} listiterator เป็นอินเทอร์เฟซที่สืบทอดมาจากตัววนซ้ำซึ่งเป็นตัววนซ้ำคิว ใช้เป็นพิเศษสำหรับรายการที่สะดวกสามารถให้การสำรวจไปข้างหน้า/ย้อนกลับ เมื่อเทียบกับตัววนซ้ำแล้วมันจะเพิ่มอินเทอร์เฟซ API เช่นการเพิ่มไม่ว่าจะเป็นองค์ประกอบก่อนหน้านี้หรือไม่และได้รับองค์ประกอบก่อนหน้า
// API ของ Listiterator // ที่สืบทอดมาจากอินเตอร์เฟสของตัววนซ้ำบูลีนบูลีน Hasnext () บทคัดย่อ e ถัดไป () เป็นโมฆะบทคัดย่อลบ () // เพิ่มอินเตอร์เฟส API อินเตอร์เฟสนามธรรมนามธรรมเพิ่ม (วัตถุ e) บูลีนนามธรรม