อินเทอร์เฟซคอลเลกชัน: คอลเลกชันเป็นอินเทอร์เฟซคอลเลกชันพื้นฐานที่สุดประกาศวิธีการทั่วไปที่เหมาะสำหรับคอลเลกชัน Java (รวมถึงชุดและรายการเท่านั้น) ตั้งค่าและแสดงรายการทั้งมรดกการเชื่อมต่อและแผนที่
วิธีการคอลเลกชันอินเตอร์เฟส:
บูลีนเพิ่ม (วัตถุ o): เพิ่มการอ้างอิงไปยังวัตถุในคอลเลกชัน
เป็นโมฆะ Clear (): ลบวัตถุทั้งหมดในคอลเลกชันนั่นคือไม่มีการอ้างอิงถึงวัตถุเหล่านี้อีกต่อไป
บูลีน isempty (): กำหนดว่าชุดว่างเปล่า
บูลีนประกอบด้วย (วัตถุ O): กำหนดว่าการอ้างอิงไปยังวัตถุเฉพาะนั้นจัดขึ้นในคอลเลกชัน
iterar iterator (): ส่งคืนวัตถุตัววนซ้ำที่สามารถใช้ซ้ำกับองค์ประกอบในคอลเลกชัน
บูลีนลบ (วัตถุ o): ลบการอ้างอิงไปยังวัตถุจากคอลเลกชัน
ขนาด int (): ส่งคืนจำนวนองค์ประกอบในคอลเลกชัน
Object [] toarray (): ส่งคืนอาร์เรย์ที่มีองค์ประกอบทั้งหมดในคอลเลกชัน
เกี่ยวกับ: วิธี iterator () และ toarray () ใช้สำหรับองค์ประกอบทั้งหมดของคอลเลกชัน อดีตส่งคืนวัตถุตัววนซ้ำและหลังส่งคืนอาร์เรย์ที่มีองค์ประกอบทั้งหมดในคอลเลกชัน
อินเทอร์เฟซตัววนซ้ำประกาศวิธีการต่อไปนี้:
Hasnext (): กำหนดว่าองค์ประกอบในคอลเลกชันได้ถูกสำรวจหรือไม่ ถ้าไม่คืนจริง
ถัดไป (): ส่งคืนองค์ประกอบถัดไป
ลบ (): ลบองค์ประกอบก่อนหน้าที่ส่งคืนโดยวิธีถัดไป () จากการรวบรวม
Set (Set): Set เป็นคอลเลกชันที่ง่ายที่สุด วัตถุในคอลเลกชันไม่ได้ถูกจัดเรียงในลักษณะเฉพาะและไม่มีวัตถุที่ซ้ำกัน ส่วนต่อประสานที่ตั้งไว้ส่วนใหญ่ใช้สองคลาสการใช้งาน:
Hashset: คลาส Hashset ใช้อัลกอริทึมแฮชเพื่อเข้าถึงวัตถุในคอลเลกชันและความเร็วในการเข้าถึงค่อนข้างเร็ว
Treeset: คลาส Treeset ใช้อินเทอร์เฟซ SortedSet ซึ่งสามารถเรียงลำดับวัตถุในคอลเลกชัน
การใช้ชุด: เก็บข้อมูลอ้างอิงไปยังวัตถุไม่มีวัตถุที่ซ้ำกัน
set set = new hashset (); string s1 = สตริงใหม่ ("hello"); string s2 = s1; string s3 = สตริงใหม่ ("โลก"); set.add (s1); set.add (s2); set.add (s3); System.out.println (set.size ()); // จำนวนวัตถุในคอลเลกชันการพิมพ์คือ 2
วิธีการเพิ่ม () ของชุดกำหนดว่าวัตถุนั้นถูกเก็บไว้ในคอลเลกชันอย่างไร
บูลีน isExists = false; iterator iterator = set.iterator (); ในขณะที่ (it.hasnext ()) {string oldstr = it.next (); ถ้า (newtr.equals (oldstr)) {isexists = true;}}}}}}}}}}}}รายการ: ลักษณะของรายการคือองค์ประกอบของมันจะถูกเก็บไว้ในลักษณะเชิงเส้นและวัตถุที่ซ้ำกันสามารถเก็บไว้ในคอลเลกชัน
คลาสการใช้งานหลักของรายการอินเทอร์เฟซรวมถึง:
ArrayList (): แสดงให้เห็นว่าความยาวสามารถเปลี่ยนเป็นอาร์เรย์ได้ องค์ประกอบสามารถเข้าถึงได้แบบสุ่มและความเร็วในการแทรกและลบองค์ประกอบลงใน ArrayList () ช้า
LinkedList (): ใช้โครงสร้างข้อมูลรายการที่เชื่อมโยงในการใช้งาน การแทรกอย่างรวดเร็วและการลบการเข้าถึงช้า
สำหรับการเข้าถึงรายการแบบสุ่มจะต้องดึงองค์ประกอบแบบสุ่มที่อยู่ในตำแหน่งที่เฉพาะเจาะจงเท่านั้น วิธีการรับ (ดัชนี int) ของรายการจะถูกนำกลับเข้าไปในวัตถุในการรวบรวมที่ตำแหน่งดัชนีที่ระบุโดยดัชนีพารามิเตอร์และตัวห้อยเริ่มต้นจาก "0" สองวิธีพื้นฐานที่สุดในการดึงวัตถุทั้งหมดในคอลเลกชัน:
1: สำหรับวิธีการวนซ้ำและรับ ():
สำหรับ (int i = 0; i <list.size (); i ++) {system.out.println (list.get (i));}2: ใช้ตัววนซ้ำ:
iterator it = list.iterator (); ในขณะที่ (it.hashnext) {system.out.println (it.next);}
แผนที่: แผนที่เป็นชุดของวัตถุคีย์แผนที่และวัตถุค่า แต่ละองค์ประกอบของมันมีคู่ของวัตถุคีย์และวัตถุค่า
เมื่อแผนที่ไม่ได้รับการสืบทอดจากอินเทอร์เฟซคอลเลกชันเมื่อใดก็ตามที่มีการให้วัตถุคีย์วัตถุค่าที่สอดคล้องกันจะถูกส่งคืน
วิธีการทั่วไปสำหรับแผนที่:
1 เพิ่มและลบการดำเนินงาน:
ใส่วัตถุ (คีย์วัตถุค่าวัตถุ): เพิ่มองค์ประกอบในการรวบรวม
Object Remove (Key Object): ลบองค์ประกอบที่เกี่ยวข้องกับคีย์
เป็นโมฆะ Putall (แผนที่ t): เพิ่มองค์ประกอบทั้งหมดจากภาพเฉพาะไปยังภาพ
เป็นโมฆะ Clear (): ลบแผนที่ทั้งหมดออกจากภาพ
2 การดำเนินการแบบสอบถาม:
Object Get (คีย์วัตถุ): รับค่าที่เกี่ยวข้องกับคีย์คำหลัก วัตถุสำคัญในคอลเลกชันแผนที่ไม่ได้รับอนุญาตให้ทำซ้ำนั่นคือผลลัพธ์ของวัตถุคีย์สองวัตถุใด ๆ ที่ถูกเปรียบเทียบโดยวิธี Equals () เป็นเท็จ อย่างไรก็ตามปุ่มหลายปุ่มสามารถแมปกับวัตถุค่าเดียวกันได้โดยเฉพาะ
การเชื่อมต่อ: คลาสยูทิลิตี้คอลเลกชัน การเชื่อมต่อให้วิธีการคงที่ในทางปฏิบัติสำหรับคอลเลกชัน Java
สรุป:
การใช้งานพื้นฐานของคอลเลกชัน Java ได้รับการสรุป ข้างต้นเป็นคอลเลกชัน Java ที่ใช้กันมากที่สุด สำหรับรายละเอียดโปรดดูเอกสารช่วยเหลือ JDK ฮ่าฮ่ามีแอพพลิเคชั่นแผนที่อีกมากมายและเป็นเช่นนี้ การเชื่อมต่อมีวิธีการปฏิบัติมากมายสำหรับรายการ /แผนที่ซึ่งมีประโยชน์มากสำหรับการพัฒนาทุกวัน
บูลีนมีคีย์ (คีย์วัตถุ): กำหนดว่ามีคีย์คำหลักในภาพ
บูลีนมีค่า (ค่าวัตถุ): กำหนดว่ามีค่าในภาพ
ขนาด int (): ส่งคืนจำนวนแผนที่ในภาพปัจจุบัน
บูลีน isempty (): กำหนดว่ามีการทำแผนที่ใด ๆ ในภาพ
รายการบันทึกวัตถุในลำดับที่วัตถุป้อนโดยไม่ต้องเรียงลำดับหรือแก้ไขการดำเนินการ Set ยอมรับเพียงครั้งเดียวสำหรับแต่ละวัตถุและใช้วิธีการเรียงลำดับภายในของตัวเอง (โดยปกติคุณจะสนใจว่าองค์ประกอบเป็นของชุดไม่ใช่คำสั่งซื้อ - มิฉะนั้นคุณควรใช้รายการ)
แผนที่ยังบันทึกสำเนาของแต่ละองค์ประกอบ แต่สิ่งนี้ขึ้นอยู่กับ "คีย์" และแผนที่ยังมีการเรียงลำดับในตัวดังนั้นจึงไม่สนใจลำดับที่เพิ่มองค์ประกอบ หากลำดับที่มีการเพิ่มองค์ประกอบเป็นสิ่งสำคัญสำหรับคุณคุณควรใช้ LinkedHashSet หรือ LinkedHashMap
รายการฟังก์ชัน:
มีสองประเภท: หนึ่งคือ arraylist พื้นฐานซึ่งมีข้อได้เปรียบของการเข้าถึงองค์ประกอบแบบสุ่มและอีกประเภทหนึ่งคือ LinkedList ที่ทรงพลังกว่าซึ่งไม่ได้ออกแบบมาสำหรับการเข้าถึงแบบสุ่มอย่างรวดเร็ว แต่มีชุดวิธีทั่วไปมากกว่า
รายการ: คำสั่งซื้อเป็นคุณลักษณะที่สำคัญที่สุดของรายการ: ช่วยให้มั่นใจได้ว่าลำดับขององค์ประกอบที่เฉพาะเจาะจงจะได้รับการบำรุงรักษา รายการเพิ่มวิธีการมากมายในการรวบรวมช่วยให้การแทรกและการลบองค์ประกอบออกไปตรงกลางของรายการ (นี่เป็นคำแนะนำสำหรับ LinkedList เท่านั้น) รายการสามารถสร้าง listiterator ซึ่งสามารถใช้เพื่อสำรวจรายการจากสองทิศทางหรือแทรกและลบองค์ประกอบจากตรงกลางของรายการ
ArrayList: รายการที่ดำเนินการโดย Array อนุญาตให้เข้าถึงองค์ประกอบแบบสุ่มอย่างรวดเร็ว แต่การแทรกและลบองค์ประกอบลงในตรงกลางของรายการช้า ผู้ฟังควรใช้เพื่อทำซ้ำผ่าน ArrayList จาก Back to Forward แทนที่จะแทรกและลบองค์ประกอบ เพราะนั่นมีราคาแพงกว่า LinkedList มาก
LinkedList: การเข้าถึงแบบต่อเนื่องได้รับการปรับให้เหมาะสมและค่าใช้จ่ายของการแทรกและการลบลงในกลางรายการไม่สูงมาก การเข้าถึงแบบสุ่มค่อนข้างช้า (ใช้ arrayList แทน) ยังมีวิธีการต่อไปนี้: addfirst (), addlast (), getFirst (), getLast (), removeFirst () และ Removelast () วิธีการเหล่านี้ (ไม่ได้กำหนดไว้ในอินเทอร์เฟซหรือคลาสฐานใด ๆ ) ทำให้ LinkedList ใช้เป็นสแต็กคิวและคิวแบบสองทิศทาง
วิธีการตั้งค่าของชุด:
ชุดมีอินเทอร์เฟซเดียวกันกับคอลเลกชันดังนั้นจึงไม่มีฟังก์ชั่นพิเศษซึ่งแตกต่างจากสองรายการที่แตกต่างกันด้านหน้า ในความเป็นจริงชุดเป็นคอลเลกชัน แต่พฤติกรรมนั้นแตกต่างกัน (นี่คือการประยุกต์ใช้โดยทั่วไปของการสืบทอดและการคิดแบบ polymorphic: การปฏิบัติพฤติกรรมที่แตกต่างกัน) ชุดไม่ได้บันทึกองค์ประกอบที่ซ้ำกัน (สำหรับวิธีการตัดสินองค์ประกอบเหมือนกันมันมีความรับผิดชอบมากขึ้น)
ชุด: แต่ละองค์ประกอบที่เก็บไว้ในชุดจะต้องไม่ซ้ำกันเพราะชุดไม่บันทึกองค์ประกอบที่ซ้ำกัน องค์ประกอบที่เพิ่มเข้ามาในชุดจะต้องกำหนดวิธี Equals () เพื่อให้แน่ใจว่าเป็นเอกลักษณ์ของวัตถุ ชุดมีอินเทอร์เฟซเดียวกันกับคอลเลกชัน อินเทอร์เฟซที่กำหนดไม่รับประกันลำดับขององค์ประกอบการบำรุงรักษา
HashSet: ตั้งค่าไว้สำหรับการค้นหาอย่างรวดเร็ว วัตถุที่เก็บไว้ใน HashSet จะต้องกำหนด HashCode ()
TREESET: ตั้งอยู่ในลำดับการบันทึกชั้นพื้นฐานเป็นโครงสร้างต้นไม้ ใช้เพื่อแยกลำดับที่สั่งซื้อจากชุด
LinkedHashSet: มีความเร็วในการสืบค้นของ HashSet และใช้รายการที่เชื่อมโยงภายในเพื่อรักษาลำดับขององค์ประกอบ (ลำดับการแทรก) ดังนั้นเมื่อคุณใช้ตัววนซ้ำในการสำรวจชุดผลลัพธ์จะแสดงตามลำดับที่แทรกองค์ประกอบ
วิธีการทำงานของแผนที่:
เมธอดใส่ (คีย์วัตถุค่าวัตถุ) เพิ่ม "ค่า" (ต้องการบางสิ่ง) และ "คีย์" ที่เกี่ยวข้องกับ "ค่า" (ใช้เพื่อค้นหา) วิธีการรับ (คีย์วัตถุ) ส่งคืน "ค่า" ที่เชื่อมโยงกับ "คีย์" ที่กำหนด คุณสามารถใช้ containskey () และ containsvalue () เพื่อทดสอบว่า "คีย์" หรือ "ค่า" รวมอยู่ในแผนที่
ไลบรารีคลาส Java มาตรฐานมีแผนที่ที่แตกต่างกันหลายประการ: HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap พวกเขาทั้งหมดมีแผนที่อินเทอร์เฟซพื้นฐานเหมือนกัน แต่พฤติกรรมประสิทธิภาพกลยุทธ์การเรียงลำดับการประหยัดวัฏจักรชีวิตของวัตถุและการพิจารณาเทียบเท่ากับ "คีย์"
ประสิทธิภาพการดำเนินการเป็นปัญหาใหญ่กับแผนที่ หากคุณดูสิ่งที่ Get () กำลังจะทำคุณจะเข้าใจว่าทำไมการค้นหา "คีย์" ใน ArrayList ค่อนข้างช้า และนี่คือที่ที่ HashMap เร่งความเร็ว HashMap ใช้ค่าพิเศษที่เรียกว่ารหัสแฮชเพื่อแทนที่การค้นหาคีย์ช้า
"มีรหัส" คือ "ค่อนข้างไม่ซ้ำกัน" เพื่อแสดงถึงค่า int ของวัตถุและมันถูกสร้างขึ้นโดยการแปลงข้อมูลบางอย่างของวัตถุ วัตถุ Java ทั้งหมดสามารถสร้างรหัสแฮชได้เนื่องจาก HashCode () เป็นวิธีที่กำหนดไว้ในวัตถุคลาสพื้นฐาน
HashMap ใช้ HashCode () ของวัตถุสำหรับการสืบค้นอย่างรวดเร็ว วิธีนี้สามารถปรับปรุงประสิทธิภาพได้อย่างมีนัยสำคัญ
แผนที่: รักษาความสัมพันธ์ของ "คู่คีย์-ค่า" เพื่อให้คุณสามารถค้นหา "ค่า" ผ่าน "ปุ่ม"
HASHMAP: แผนที่ขึ้นอยู่กับการใช้งานตารางแฮช ค่าใช้จ่ายของการแทรกและการสืบค้น "คู่คีย์-ค่า" ได้รับการแก้ไข ความจุความจุและปัจจัยโหลดปัจจัยโหลดสามารถตั้งค่าผ่านตัวสร้างเพื่อปรับประสิทธิภาพของภาชนะ
LinkedHashMap: คล้ายกับ HASHMAP แต่เมื่อวนซ้ำไปตามลำดับที่ "คู่คีย์-ค่าคู่" คือลำดับการแทรกหรือลำดับที่ใช้อย่างน้อยเมื่อเร็ว ๆ นี้ (LRU) ช้ากว่า Hashmap เพียงเล็กน้อย มันเร็วกว่าที่จะส่งเมื่อเข้าถึงซ้ำ ๆ เนื่องจากใช้รายการที่เชื่อมโยงเพื่อรักษาคำสั่งซื้อภายใน
TreeMap: การใช้งานตามโครงสร้างข้อมูลต้นไม้สีแดงและสีดำ เมื่อคุณดูที่ "คีย์" หรือ "คู่คีย์-ค่า" พวกเขาจะถูกเรียงลำดับ (คำสั่งซื้อจะถูกกำหนดโดย comparabel หรือ comparator) Treemap มีลักษณะโดยความจริงที่ว่าผลลัพธ์ที่คุณได้รับนั้นถูกจัดเรียง TEEMAP เป็นแผนที่เดียวที่มีวิธีการส่ง () ซึ่งสามารถส่งคืนทรีย่อย
WeakhashMap: แผนที่คีย์ที่อ่อนแอวัตถุที่ใช้ในแผนที่ได้รับอนุญาตให้ปล่อยออกมาด้วย: สิ่งนี้ถูกออกแบบมาเพื่อแก้ปัญหาพิเศษ หากไม่มีการอ้างอิงนอกแผนที่ชี้ไปที่ "คีย์" "คีย์" นี้สามารถนำกลับมาใช้ใหม่ได้โดยนักสะสมขยะ
IdentifyHashMap: ใช้ == แทนที่จะเป็นเท่ากับ () เพื่อเปรียบเทียบ "ปุ่ม" ออกแบบมาโดยเฉพาะเพื่อแก้ปัญหาพิเศษ