(i) คอลเลกชันและคอลเลกชัน
ทั้งสองอยู่ภายใต้แพ็คเกจ java.util ความแตกต่างคือ:
คอลเลกชันเป็นอินเทอร์เฟซคอลเลกชันที่มีการแบ่งย่อยทั่วไปเช่น listset และเป็นโหนดแรกของกราฟเฟรมเวิร์กคอลเลกชัน มันมีชุดของวิธีการสำหรับการดำเนินการขั้นพื้นฐานในวัตถุคอลเลกชัน
วิธีการทั่วไปคือ:
บูลีนเพิ่ม (e e) เพิ่มองค์ประกอบลงในคอนเทนเนอร์ ขนาด int () ส่งคืนจำนวนองค์ประกอบของคอลเลกชัน บูลีน isempty () กำหนดว่าภาชนะนั้นว่างเปล่าหรือไม่ บูลีนประกอบด้วย (วัตถุ o) หากคอลเลกชันนี้มีองค์ประกอบที่ระบุจะส่งคืนจริงและวิธีการ Equals () จะถูกนำมาใช้ที่นี่; บูลีนลบ (วัตถุ o) ลบอินสแตนซ์ขององค์ประกอบที่ระบุ; เป็นต้น
คอลเลกชันเป็นคลาส wrapper ที่มีวิธีการ polymorphic แบบคงที่ต่าง ๆ สำหรับการดำเนินการรวบรวมซึ่งมีอัลกอริทึม polymorphic ที่ดำเนินการในการรวบรวมเช่น "wrapper" ซึ่งส่งคืนคอลเลกชันใหม่ที่ได้รับการสนับสนุนโดยคอลเลกชันที่ระบุและอีกสองสามอย่าง
วิธีการทั่วไปคือ:
Void Sort (รายการ) เรียงลำดับเนื้อหาของรายการ
ควรสังเกตที่นี่ว่า (PS: คำอธิบายต่อไปนี้เกี่ยวกับการเรียงลำดับ () ถูกตัดตอนมาจาก การสนทนาสั้น ๆ เกี่ยวกับอาร์เรย์วัตถุหรือการเรียงลำดับรายการและ การเรียงลำดับคอลเลกชัน
การเรียงลำดับร่างกายในฟังก์ชั่นประเภทนี้ () คืออาร์เรย์. sort ()
@suppresswarnings ("ไม่ได้ตรวจสอบ") สาธารณะคงที่ <t ขยายเปรียบเทียบได้ <? super t >> การเรียงลำดับเป็นโมฆะ (รายการ <t> รายการ) {object [] array = list.toarray (); array.sort (อาร์เรย์); int i = 0; listiterator <t> it = list.listiterator (); ในขณะที่ (it.hasnext ()) {it.next (); it.set ((t) อาร์เรย์ [i ++]); - ใน array.sort () จะเห็นได้ว่ามันถูกนำไปใช้ผ่าน ComparableTimsort.sort (Object [] A): การเรียงลำดับโมฆะสาธารณะแบบคงที่ (อาร์เรย์ [] อาร์เรย์) {// เริ่มต้น Android-Changed ComparableTimsort.sort (อาร์เรย์); // สิ้นสุด Android-Changed} การเรียงลำดับโมฆะแบบคงที่ (วัตถุ [] a) ถึงการเรียงลำดับโมฆะแบบคงที่ (วัตถุ [] a, int lo, int hi) ไปยังโมฆะไบนารีแบบคงที่ส่วนตัว (วัตถุ [] a, int lo, int hi, int start) ใน BinarySort ส่วนที่ใช้สำหรับการเปรียบเทียบขนาดคือ: เทียบเท่า <jobch> pivot = (เปรียบเทียบได้) a [start]; int ซ้าย = lo; int ขวา = เริ่ม; ยืนยันซ้าย <= ขวา; ในขณะที่ (ซ้าย <ขวา) {int mid = (ซ้าย + ขวา) >>> 1; if (pivot.compareto (a [mid]) <0) ขวา = mid; ellet left = mid + 1; -วิธีเดียวของอินเทอร์เฟซที่เปรียบเทียบได้ถูกใช้ในการค้นหาแบบไบนารี: compareto () หากคลาสที่กำหนดเองทั้งหมดถูกโหลดลงในคอนเทนเนอร์และจำเป็นต้องเปรียบเทียบคุณต้องใช้อินเทอร์เฟซที่เปรียบเทียบได้หรือสืบทอดคลาสเปรียบเทียบและแทนที่วิธีการเปรียบเทียบ ()
Int BinarySearch (รายการรายการ) สำหรับคอนเทนเนอร์รายการตามลำดับวิธีการค้นหาครึ่งหนึ่งใช้เพื่อค้นหาวัตถุที่ระบุ; โมฆะย้อนกลับ (รายการ) จัดเรียงวัตถุในรายการคอนเทนเนอร์ตามลำดับย้อนกลับ เป็นต้น
(ii) Iterator และ Iterable
ก่อนอื่น Iterable จะอยู่ภายใต้แพ็คเกจ java.lang และตัววนซ้ำอยู่ภายใต้แพ็คเกจ Java.util ในเฟรมเวิร์กคอลเลกชันมีการกำหนดสามวิธีในอินเทอร์เฟซตัววนซ้ำ: บูลีน hasnext (); e ถัดไป (); โมฆะลบ () ITERABLE เท่านั้นกำหนดวิธีเดียว: iterator () ค่าส่งคืนเป็นวัตถุที่ใช้อินเตอร์เฟสตัววนซ้ำ คอลเลกชันสืบทอดอินเทอร์เฟซสุดยอดของ Iterable ดังนั้นคลาสการใช้งานทั้งหมดในกรอบการรวบรวมมีวิธีการวนซ้ำ () และ polymorphism ช่วยให้การอ้างอิงของตัววนซ้ำสามารถเข้าถึงชิ้นส่วน (นั่นคือทั้งสามวิธี) ในคอลเลกชันปัจจุบันที่ใช้ตัววนซ้ำ หากคุณต้องการลบองค์ประกอบในเวลานี้เนื่องจาก Iterator เสร็จสิ้นการล็อคในการดำเนินการคอลเลกชันนี้คุณสามารถใช้วิธีการลบ () ของตัววนซ้ำในระหว่างการสำรวจวนซ้ำกับตัววนซ้ำและไม่สามารถใช้วิธีการลบ (วัตถุ) ของคอลเลกชันได้
เหตุใดเราจึงต้องใช้อินเทอร์เฟซที่ทำซ้ำ ทำไมไม่ใช้อินเทอร์เฟซตัววนซ้ำโดยตรง? ด้วยวิธีนี้คลาสคอลเลกชันสามารถสืบทอดวิธีการทั้งสามนี้ได้โดยตรง?
ลองดูคลาสคอลเลกชันใน JDK เช่นตระกูลรายการหรือตระกูลชุดซึ่งใช้อินเตอร์เฟสที่วนซ้ำ แต่ไม่ได้ใช้อินเทอร์เฟซตัววนซ้ำโดยตรง
คิดเกี่ยวกับมันอย่างระมัดระวังและสมเหตุสมผล
เนื่องจากวิธีการหลักของอินเทอร์เฟซตัววนซ้ำถัดไป () หรือ hasnext () ขึ้นอยู่กับตำแหน่งการวนซ้ำปัจจุบันของตัววนซ้ำ
หากคอลเลกชันใช้อินเทอร์เฟซตัววนซ้ำโดยตรงมันจะนำไปสู่วัตถุคอลเลกชันที่มีข้อมูล (ตัวชี้) ของตำแหน่งการวนซ้ำในปัจจุบันอย่างหลีกเลี่ยงไม่ได้
เมื่อคอลเลกชันถูกส่งผ่านระหว่างวิธีการที่แตกต่างกันเนื่องจากตำแหน่งการวนซ้ำในปัจจุบันไม่ได้ตั้งไว้ล่วงหน้าผลลัพธ์ของวิธีถัดไป () จะไม่สามารถคาดเดาได้
เว้นแต่จะมีการเพิ่มวิธีการรีเซ็ต () ลงในอินเทอร์เฟซตัววนซ้ำเพื่อรีเซ็ตตำแหน่งการวนซ้ำปัจจุบัน
แต่ในกรณีนี้คอลเลกชันสามารถมีตำแหน่งการทำซ้ำในปัจจุบันได้เพียงแห่งเดียวในเวลาเดียวกัน
ITERABLE ไม่ใช่กรณีและการโทรแต่ละครั้งจะส่งคืนการนับ Iterator จากศูนย์
ตัววนซ้ำหลายคนไม่รบกวนกันและกัน
บทความข้างต้นขึ้นอยู่กับจุดความรู้ที่สับสน (คำอธิบายโดยละเอียด) ในคอลเลกชัน Java ฉันหวังว่ามันจะให้ข้อมูลอ้างอิงและฉันหวังว่าคุณจะสนับสนุน wulin.com มากขึ้น