กลับไปหน้าบทความ

อ่าน 11 นาที

ไม่มีชื่อบทความ

เฟรมเวิร์กคอลเลกชัน ของ Java คือชุดของ คลาส และ อินเทอร์เฟซ ที่ใช้ โครงสร้างข้อมูล คอลเลกชันที่นำกลับมาใช้ซ้ำได้ทั่วไป ( คอลเลกชัน ) [ 1 ]

เฟรมเวิร์กคอลเลกชัน Java

แผนภาพแสดงลำดับชั้นของคลาสและอินเทอร์เฟซของเฟรมเวิร์กคอลเลกชันของ Java
ลำดับชั้นของคลาสและอินเทอร์เฟซในเฟรมเวิร์กคอลเลกชันของ Java โดยไม่รวมประเภทในแพ็กเกจ java.util.concurrent และคลาสอื่นๆ อีกเล็กน้อย

เฟรมเวิร์กคอลเลกชันของJavaคือชุดของคลาสและอินเทอร์เฟซที่ใช้โครงสร้างข้อมูล คอลเลกชันที่นำกลับมาใช้ซ้ำได้ทั่วไป ( คอลเลกชัน ) [ 1 ]

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

ความแตกต่างจากอาร์เรย์

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

Collections ไม่สามารถเก็บประเภทข้อมูลพื้นฐาน เช่นint, long, หรือdoubleได้[ 2 ]แต่Collections สามารถเก็บคลาส wrapperเช่นjava.lang.Integer, java.lang.Long, หรือjava.lang.Doubleได้[ 3 ]

Collectionอ็อบเจ็กต์ทั่วไป เช่น อ็อบเจ็กต์แบบเจเนริก จะไม่เปลี่ยนแปลง แต่อาร์เรย์จะเปลี่ยนแปลงได้นี่ถือเป็นข้อดีของอ็อบเจ็กต์แบบเจเนริก เช่นCollectionเมื่อเปรียบเทียบกับอาร์เรย์ เพราะภายใต้สถานการณ์ การใช้อ็อบเจ็กต์แบบเจเนริกCollectionแทนอาร์เรย์จะช่วยป้องกันข้อผิดพลาดขณะรันไทม์ได้ โดยการโยนข้อผิดพลาดขณะคอมไพล์แทน เพื่อแจ้งให้นักพัฒนาแก้ไขโค้ด ตัวอย่างเช่น หากนักพัฒนาประกาศObject[]อ็อบเจ็กต์ และกำหนดObject[]ค่าให้กับอ็อบเจ็กต์นั้นด้วยค่าที่ส่งคืนโดยLong[]อินสแตนซ์ใหม่ที่มีความจุที่แน่นอน จะไม่มีข้อผิดพลาดขณะคอมไพล์เกิดขึ้น หากนักพัฒนาพยายามเพิ่มค่าให้Stringกับอ็อบเจ็กต์นี้Long[]โปรแกรม Java จะโยนข้อผิดพลาดArrayStoreExceptionในทางกลับกัน หากนักพัฒนาประกาศอินสแตนซ์ใหม่ของอ็อบเจ็กต์เป็นค่าว่างCollection<Object>คอมArrayList<Long>ไพเลอร์ Java จะ (อย่างถูกต้อง) โยนข้อผิดพลาดขณะคอมไพล์เพื่อระบุว่าโค้ดเขียนด้วยประเภทที่ไม่เข้ากันและไม่ถูกต้อง ซึ่งจะช่วยป้องกันข้อผิดพลาดขณะรันไทม์ที่อาจเกิดขึ้นได้ นักพัฒนาสามารถแก้ไขโค้ดได้โดยการสร้างอินสแตนซ์Collection<Object>เป็นArrayList<Object>อ็อบเจ็กต์ หากโค้ดใช้ Java SE7 หรือเวอร์ชันที่ใหม่กว่า นักพัฒนาสามารถสร้างอินสแตนซ์Collection<Object>เป็นArrayList<>อ็อบเจ็กต์ได้โดยใช้ตัวดำเนินการไดมอนด์[ 2 ]

Collections เป็นแบบทั่วไปและจึงถูกทำให้เป็นรูปธรรมแต่อาร์เรย์ไม่ได้ถูกทำให้เป็นรูปธรรม[ 2 ]

ประวัติศาสตร์

การใช้งานคอลเลกชันในแพลตฟอร์ม Java เวอร์ชันก่อนJDK 1.2ประกอบด้วยคลาสโครงสร้างข้อมูลเพียงไม่กี่คลาส แต่ไม่มีเฟรมเวิร์กคอลเลกชัน[ 4 ]วิธีมาตรฐานสำหรับการจัดกลุ่มวัตถุ Java คือผ่านอาร์เรย์VectorและHashtableคลาส ซึ่งน่าเสียดายที่ไม่สามารถขยายได้ง่าย และไม่ได้ใช้งานอินเทอร์เฟซสมาชิกมาตรฐาน[ 5 ]

เพื่อตอบสนองความต้องการโครงสร้างข้อมูล คอลเลกชัน ที่นำกลับมาใช้ใหม่ได้ จึงมีการพัฒนาเฟรมเวิร์กอิสระหลายเฟรมเวิร์ก[ 4 ] ซึ่งเฟรมเวิร์กที่ใช้มากที่สุดคือแพ็กเกจ Collections ของ Doug Lea [ 6 ] และไลบรารีคอเลกชันทั่วไปของ ObjectSpace ( JGL ) [ 7 ]ซึ่งเป้าหมายหลักคือความสอดคล้องกับไลบรารีเทมเพลตมาตรฐานC++ (STL) [ 8 ]

เฟรมเวิร์กคอลเลกชันได้รับการออกแบบและพัฒนาโดยJoshua Bloch เป็นหลัก และเปิดตัวในJDK 1.2โดยนำแนวคิดและคลาสจำนวนมากจากแพ็คเกจ Collections ของ Doug Lea มาใช้ ซ้ำ ซึ่งต่อมาแพ็คเกจดังกล่าวก็ถูกยกเลิก[ 6 ] Sun Microsystemsเลือกที่จะไม่ใช้แนวคิดของ JGL เนื่องจากพวกเขาต้องการเฟรมเวิร์กที่กระชับ และความสอดคล้องกับ C++ ไม่ใช่เป้าหมายของพวกเขา[ 9 ]

ต่อมา Doug Lea ได้พัฒนาแพ็คเกจการทำงานพร้อมกัน ซึ่งประกอบด้วยคลาสที่เกี่ยวข้องกับคอลเลกชันใหม่[ 10 ]เวอร์ชันที่อัปเดตของยูทิลิตี้การทำงานพร้อมกันเหล่านี้ถูกรวมอยู่ในJDK 5.0ตามJSR 166

สถาปัตยกรรม

คอลเลกชันส่วนใหญ่ใน Java ที่ไม่ใช่แมปนั้นได้มาจากjava.util.Collectionอินเทอร์เฟซCollectionซึ่งกำหนดส่วนประกอบพื้นฐานของคอลเลกชันทั้งหมด

อินเทอร์เฟซมีadd(E e)เมธอดremove(E e)สำหรับเพิ่มและลบออกจากCollectionตามลำดับ นอกจากนี้ยังมีtoArray()เมธอดซึ่งแปลงCollectionเป็นอาร์เรย์ของObjectในCollection(โดยมีประเภทการส่งคืนเป็นObject[]) [ 11 ]สุดท้าย contains(E e)เมธอดจะตรวจสอบว่าองค์ประกอบที่ระบุมีอยู่ในหรือCollectionไม่

อินCollectionเทอร์เฟซนี้เป็นซับอินเทอร์เฟซของjava.lang.Iterableดังนั้นองค์ประกอบใดๆ ก็Collectionสามารถเป็นเป้าหมายของ คำสั่ง for-each ได้ ( Iterableอินเทอร์เฟซนี้มีiterator()เมธอดที่ใช้โดยคำสั่ง for-each) Collectionองค์ประกอบทั้งหมดจะใช้งานอินเทอร์เฟซjava.util.Iteratorเพื่อสแกนองค์ประกอบทั้งหมดCollectionใน

Collectionเป็นแบบทั่วไปCollectionสามารถจัดเก็บอะไรก็ได้Objectตัวอย่างเช่น การใช้งานใดๆ ของCollection<String>ประกอบด้วยStringวัตถุ ไม่จำเป็นต้องทำการแปลงประเภทเมื่อใช้Stringวัตถุจากการใช้งานของCollection<String>[ 12 ] โปรดทราบว่าวงเล็บเหลี่ยม< >สามารถเก็บอาร์กิวเมนต์ประเภทที่ระบุว่าCollectionเก็บ ประเภทใด [ 13 ]

กรอบการรวบรวม

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

ประเภทของคอลเลกชัน

มีคอลเลกชันหลายประเภทได้แก่คิวแผนที่รายการและเซต

คิวช่วยให้นักเขียนโปรแกรมสามารถแทรกรายการตามลำดับที่กำหนดและดึงรายการเหล่านั้นออกมาตามลำดับเดียวกันได้ ตัวอย่างเช่น รายชื่อผู้รอคอย อินเทอร์เฟซพื้นฐานสำหรับคิวเรียกว่า `<a href="..."> Queue`

พจนานุกรม/แผนที่ (Dictionaries/Maps) เก็บการอ้างอิงถึงวัตถุโดยใช้คีย์ค้นหาเพื่อเข้าถึงค่าของวัตถุนั้น ตัวอย่างหนึ่งของคีย์คือบัตรประจำตัวประชาชน อินเทอร์เฟซพื้นฐานสำหรับพจนานุกรม/แผนที่เรียกว่าMap` <div class="dictionaries/maps">`

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

เซตคือคอลเลกชันที่ไม่มีลำดับซึ่งสามารถวนซ้ำได้และมีองค์ประกอบแต่ละอย่างได้เพียงครั้งเดียวเท่านั้น อินเทอร์เฟซพื้นฐานสำหรับเซตเรียกSetว่า[ 3 ]

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

ในเฟรมเวิร์กคอลเลกชันนั้น รายการ (List) ถูกนำมาใช้ผ่านทางjava.util.Listอินเทอร์เฟซ โดยนิยามรายการว่าเป็นเวอร์ชันที่ยืดหยุ่นกว่าของอาร์เรย์ องค์ประกอบจะมีลำดับเฉพาะ และอนุญาตให้มีองค์ประกอบซ้ำได้ สามารถวางองค์ประกอบไว้ในตำแหน่งที่กำหนดได้ และยังสามารถค้นหาองค์ประกอบภายในรายการได้อีกด้วย

แสดงรายการการใช้งาน

มีคลาสที่เป็นรูปธรรมหลายคลาสที่ใช้งานอินเทอร์เฟ ซนี้ Listรวมถึงและคลาสย่อยที่เกี่ยวข้องทั้งหมด ตลอดจน อีกด้วยAbstractListCopyOnWriteArrayList

คลาสAbstractList

คลาสย่อยโดยตรงของคลาส ได้แก่, และ.AbstractListAbstractSequentialListArrayListVector

AbstractListเป็นตัวอย่างของการใช้งานโครงร่างซึ่งใช้ประโยชน์และรวมข้อดีของอินเทอร์เฟซและคลาสแบบนามธรรมเข้าด้วยกัน โดยทำให้ผู้พัฒนาสามารถพัฒนาการใช้งานของตนเองสำหรับอินเทอร์เฟซที่กำหนดได้ง่าย[ 14 ]

คลาสArrayList

java.util.ArrayListคลาสนี้ ใช้โครงสร้างข้อมูล Listแบบอาร์เรย์ เมื่อใดก็ตามที่Listต้องการใช้ฟังก์ชันเฉพาะของอาร์เรย์ คลาสจะทำการเคลื่อนย้ายองค์ประกอบภายในอาร์เรย์เพื่อเรียกใช้ฟังก์ชันนั้น

คลาสLinkedList

คลาสjava.util.LinkedListจะเก็บองค์ประกอบไว้ในโหนด โดยแต่ละโหนดจะมีตัวชี้ไปยังโหนดก่อนหน้าและโหนดถัดไปในListสามารถListท่องไปได้โดยการตามตัวชี้ และสามารถเพิ่มหรือลบองค์ประกอบได้โดยการเปลี่ยนตัวชี้ไปมาเพื่อวางโหนดในตำแหน่งที่เหมาะสม[ 15 ]

คลาสเวกเตอร์

คลาส นี้มีคลาสย่อยโดยตรง นี่เป็นตัวอย่างของการละเมิด หลักการ การประกอบเหนือการสืบทอดในไลบรารีแพลตฟอร์ม Java เนื่องจากในวิทยาศาสตร์คอมพิวเตอร์เวกเตอร์โดยทั่วไปไม่ใช่สแต็ก [ 16 ] การประกอบจะเหมาะสมกว่าในสถานการณ์นี้[ 16 ]VectorStack

คลาสStack

คลาสStack มีการดำเนินการห้าอย่างที่อนุญาตให้จัดการ Stack ได้Stack ถูกสร้างขึ้นโดยใช้ Stack มีเมธอดสำหรับเพิ่มอ็อบเจ็กต์ใหม่ลงใน Stack (เมธอด `get` ) และสำหรับดึงอ็อบเจ็กต์ออกจาก Stack (เมธอด `get` ) Stack จะส่งคืนอ็อบเจ็กต์ตามหลักLast-In-First-Out (LIFO) เช่น อ็อบเจ็กต์ที่ถูกเพิ่มลงใน Stack ล่าสุดจะถูกส่งคืนก่อนStack เป็นการใช้งาน Stack มาตรฐานที่ Java จัดให้Stackextendsjava.util.VectorVectorStackjava.util.StackStackStackpush(E e)Stackpop()StackStackjava.util.Stack

คลาสStackStack แทนสแต็กของวัตถุแบบเข้าหลังออกก่อน (LIFO) คลาส Stack มีการดำเนินการเพิ่มเติมอีกห้าอย่างที่ช่วยให้สามารถVectorจัดการ Stack ได้ การดำเนินการ Stackปกติpush(E e)คือpop()การตรวจสอบรายการบนสุดของ Stack รวมถึงเมธอด ( peek()) สำหรับดูรายการบนสุดของ Stack Stackเมธอดสำหรับตรวจสอบว่า Stack Stackว่างเปล่าหรือไม่ ( empty()) และเมธอดสำหรับค้นหาStackรายการใน Stack และดูว่ารายการนั้นอยู่ห่างจากด้านบนสุดเท่าใด ( search(Object o)) เมื่อ Stack Stackถูกสร้างขึ้นครั้งแรก จะไม่มีรายการใด ๆ อยู่ภายใน

คลาสCopyOnWriteArrayList

ขยายCopyOnWriteArrayListคลาสObjectและไม่ขยายคลาสอื่นใดCopyOnWriteArrayListช่วยให้ปลอดภัยต่อเธรดโดยไม่ต้องทำการซิงโครไนซ์มากเกินไป[ 17 ]

ในบางสถานการณ์ การซิงโครไนซ์เป็นสิ่งจำเป็น ตัวอย่างเช่น หากเมธอดแก้ไขฟิลด์คงที่ และเมธอดนั้นต้องถูกเรียกโดยเธรดหลายตัว การซิงโครไนซ์ก็เป็นสิ่งจำเป็น และCopyOnWriteArrayListไม่ควรใช้ ยูทิลิตี้การทำงานพร้อมกัน เช่น [ 17 ]

อย่างไรก็ตาม การซิงโครไนซ์อาจทำให้เกิดภาระด้านประสิทธิภาพ สำหรับสถานการณ์ที่การซิงโครไนซ์ไม่จำเป็น ก็CopyOnWriteArrayListมีทางเลือกอื่นที่ปลอดภัยต่อเธรดแทนการซิงโครไนซ์ซึ่งใช้ประโยชน์จากโปรเซสเซอร์มัลติคอร์และส่งผลให้มีการใช้ CPU สูงขึ้น [ 17 ]

อิน เทอร์เฟซคิว

อินjava.util.Queueเทอร์เฟซนี้กำหนดโครงสร้างข้อมูลคิว ซึ่งจัดเก็บองค์ประกอบตามลำดับที่ถูกเพิ่มเข้ามา องค์ประกอบที่เพิ่มเข้ามาใหม่จะไปอยู่ที่ท้ายแถว และองค์ประกอบจะถูกนำออกจากด้านหน้า ทำให้เกิด ระบบ เข้าก่อนออกก่อน ( FIFO) อินเทอร์เฟซนี้ถูกนำไปใช้โดยjava.util.LinkedList, java.util.ArrayDeque, java.util.PriorityQueueและ

การใช้งานคิว

คลาสAbstractQueue

คลาสย่อยโดยตรงของคลาส ได้แก่, , , , . และ .AbstractQueueArrayBlockingQueueConcurrentLinkedQueueDelayeQueueLinkedBlockingDequeLinkedBlockingQueueLinkedTransferQueuePriorityBlockingQueue

โปรดทราบว่าและต่างก็สืบทอดมาจากแต่ไม่สืบทอดมาจากคลาสแบบนามธรรมอื่นๆเช่นArrayDequeConcurrentLinkedDequeAbstractCollectionAbstractQueue

AbstractQueueเป็นตัวอย่างของ การใช้ งานแบบโครงร่าง

คลาสคิวลำดับความสำคัญ

java.util.PriorityQueueคลาสนี้ ใช้งาน java.util.Queueแต่ยังปรับเปลี่ยนอีกด้วย[ 18 ] มี เมธอดPriorityQueueเพิ่มเติม[ 18 ]แทนที่จะเรียงลำดับองค์ประกอบตามลำดับที่แทรกเข้าไป จะเรียงลำดับตามลำดับความสำคัญ เมธอดที่ใช้ในการกำหนดลำดับความสำคัญคือเมธอดในองค์ประกอบ หรือเมธอดที่กำหนดในตัวสร้าง คลาสนี้สร้างสิ่งนี้โดยใช้ฮีปเพื่อรักษารายการให้เรียงลำดับ[ 19 ]comparator()java.lang.Comparable#compareTo(T)

คลาสConcurrentLinkedQueue

คลาสjava.util.concurrent.ConcurrentLinkedQueueขยาย. ใช้งานอินเทอร์เฟซ[ 20 ]java.util.AbstractQueueConcurrentLinkedQueuejava.util.Queue

คลาส นี้ConcurrentLinkedQueueเป็นคอลเลกชันที่ปลอดภัยสำหรับเธรด เนื่องจากสำหรับองค์ประกอบใดๆ ที่วางอยู่ภายในJava Collection Library จะรับประกันว่าองค์ประกอบนั้นได้รับการเผยแพร่อย่างปลอดภัยโดยอนุญาตให้เธรดใดๆ ก็ตามสามารถรับองค์ประกอบจากคอลเลกชันได้[ 21 ]วัตถุจะถูกกล่าวว่าได้รับการเผยแพร่อย่างปลอดภัยหากสถานะของวัตถุนั้นสามารถมองเห็นได้โดยเธรดอื่นๆ ทั้งหมดในเวลาเดียวกัน[ 21 ]การเผยแพร่อย่างปลอดภัยมักต้องการการซิงโครไนซ์ของเธรดที่เผยแพร่และเธรดที่บริโภค[ 21 ]ConcurrentLinkedQueue

อินเทอร์เฟซBlockingQueue

อิน java.util.concurrent.BlockingQueueเทอร์เฟซขยายออกQueueไป[ 20 ]

อินเทอร์เฟซมีซับอินเทอร์เฟซโดยตรงดังต่อไปนี้: และทำงานเหมือนปกติแต่การเพิ่มและการลบออกจากจะเป็นการบล็อก[ 22 ]หาก เรียกใช้กับ ที่ว่างเปล่าสามารถตั้งค่าให้รอตามเวลาที่กำหนดหรือรออย่างไม่มีกำหนดจนกว่าจะมีรายการปรากฏใน ในทำนองเดียวกัน การเพิ่มรายการโดยใช้วิธีการจะอยู่ภายใต้ข้อจำกัดความจุที่เป็นทางเลือกบนและเมธอดสามารถรอจนกว่าจะมีพื้นที่ว่างในก่อนที่จะส่งคืนอินเทอร์เฟซแนะนำเมธอดที่ลบและรับส่วนหัวของและรอจนกว่าจะไม่ว่างเปล่าอีกต่อไปหากจำเป็น[ 23 ] [ 24 ]BlockingQueueBlockingDequeTransferQueueBlockingQueueQueueBlockingQueueremove(Object o)BlockingQueueBlockingQueueadd(Object o)BlockingQueueBlockingQueueBlockingQueuetake()BlockingQueueBlockingQueue

อินเทอร์เฟซคิวสองด้าน ( Deque )

อินเทอร์เฟซขยายอินเทอร์เฟซ[ 25 ]สร้างคิวแบบสองด้าน ในขณะที่คิวปกติอนุญาตให้แทรกที่ด้านหลังและนำออกที่ด้านหน้าเท่านั้นคิวแบบสองด้านจะอนุญาตให้แทรกหรือนำออกได้ทั้งที่ด้านหน้าและด้านหลัง คิวแบบสองด้านจะเหมือนกับคิวที่สามารถใช้ไปข้างหน้าหรือข้างหลัง หรือทั้งสองอย่างพร้อมกัน นอกจากนี้ยังสามารถสร้างตัววนซ้ำทั้งแบบไปข้างหน้าและแบบย้อนกลับได้อินเทอร์เฟซนี้ถูกนำไปใช้โดยและ[ 26 ]DequeQueueDequeQueueDequeDequeQueueDequejava.util.ArrayDequejava.util.LinkedList

การใช้งานDeque

คลาสLinkedList

LinkedListแน่นอนว่ายังใช้Listอินเทอร์เฟซและสามารถใช้เป็นอินเทอร์เฟซได้เช่นกัน แต่ยังมีQueueเมธอดLinkedListที่ใช้อินjava.util.Dequeเทอร์เฟซ ทำให้มีความยืดหยุ่นมากขึ้น[ 27 ]

คลาสArrayDeque

ArrayDequeใช้งานQueueเป็นอาร์เรย์ คล้ายกับLinkedListก็ArrayDequeยังใช้งานjava.util.Dequeอินเทอร์เฟซ ด้วย [ 27 ]

อินเทอร์เฟซBlockingDeque

อินjava.util.concurrent.BlockingDequeเทอร์เฟซขยายjava.util.concurrent.BlockingQueue. [ 25 ] คล้ายกับ. มันให้วิธีการเดียวกันสำหรับการแทรกและการลบพร้อมขีดจำกัดเวลาในการรอให้การแทรกหรือการลบเป็นไปได้ อย่างไรก็ตาม อินเทอร์เฟซยังให้ความยืดหยุ่นของ. การแทรกและการลบสามารถเกิดขึ้นได้ทั้งสองด้าน ฟังก์ชันการบล็อกถูกรวมเข้ากับฟังก์ชัน[ 28 ]BlockingDequeBlockingQueueDequeDeque

ตั้งค่าอินเทอร์เฟซ

อินเทอร์เฟซ ของ Java java.util.Setกำหนดออบเจ็กต์ออบเจ็กต์Setอ อบเจ็กต์อ Setอบเจ็กต์ไม่สามารถมีองค์ประกอบที่ซ้ำกันได้ นอกจากนี้ อ อบเจ็กต์ออบเจ็กต์ยัง Setไม่มีลำดับที่แน่นอน ดังนั้นจึงไม่สามารถค้นหาองค์ประกอบโดยใช้ดัชนีได้ ออบเจ็กต์ออบเจ็กต์Setถูกนำไปใช้โดย `index` java.util.HashSet, java.util.LinkedHashSet`index` และjava.util.TreeSet`index`

ตั้งค่าการใช้งานอินเทอร์เฟซ

อินเทอร์เฟซ Set มีหลายรูปแบบ รวมถึงและคลาสย่อยต่างๆ ตลอดจนคลาสภายในแบบคงที่ขั้นสุดท้าย(โดยที่และเป็นพารามิเตอร์ประเภทอย่างเป็นทางการ)AbstractSetConcurrentHashMap.KeySetView<K,V>KV

AbstractSet

AbstractSetเป็นการใช้งานโครงร่างสำหรับอินเทอร์เฟซ[ 14 ]Set

คลาสย่อยโดยตรงของได้แก่, , , และ.AbstractSetConcurrentSkipListSetCopyOnWriteArraySetEnumSetHashSetTreeSet

คลาสEnumSet

คลาสนี้ ขยายมาจากคลาส อื่น คลาสนี้ไม่มีคอนสตรัคเตอร์สาธารณะ และมีเพียงเมธอดโรงงานแบบคงที่เท่านั้น[ 29 ]EnumSetAbstractSetEnumSet

EnumSetประกอบด้วยเมธอดโรงงานแบบคงที่[ 30 ] เมธอดนี้เป็นเมธอดการรวมกลุ่ม[ 29 ]โดยจะรับพารามิเตอร์หลายตัว พิจารณาประเภทของพารามิเตอร์ จากนั้นส่งคืนอินสแตนซ์ที่มีประเภทที่เหมาะสม[ 29 ]ณ ปี 2018 การใช้งาน Java SE8 OpenJDKใช้การใช้งานสองแบบซึ่งมองไม่เห็นสำหรับไคลเอ็นต์ ได้แก่และ[ 29 ] หากไม่ให้ประโยชน์ด้านประสิทธิภาพใดๆ สำหรับประเภท enum ขนาดเล็กอีกต่อไป ก็สามารถลบออกจากไลบรารีได้โดยไม่ส่งผลกระทบเชิงลบต่อ Java Collection Library [ 29 ]EnumSet.of()EnumSetRegularEnumSetJumboEnumSetRegularEnumSet

EnumSetเป็นสิ่งทดแทนที่ดีสำหรับฟิลด์บิตซึ่งเป็นเซตประเภทหนึ่ง ดังที่อธิบายไว้ด้านล่าง[ 30 ]

ตามธรรมเนียมแล้ว เมื่อใดก็ตามที่นักพัฒนาพบองค์ประกอบของประเภทแจงนับที่ต้องใส่ลงในเซต นักพัฒนาจะใช้รูปแบบ enum intซึ่งค่าคงที่แต่ละค่าจะถูกกำหนดกำลังของ 2 ที่แตกต่างกัน[ 30 ]การแสดงบิตนี้ช่วยให้นักพัฒนาสามารถใช้การดำเนินการ OR แบบบิตได้ เพื่อให้ค่าคงที่สามารถรวมกันเป็นเซต หรือที่เรียกว่าฟิลด์บิต ได้ การแสดงฟิลด์บิตนี้ช่วยให้นักพัฒนาสามารถดำเนินการตามเซตและเลขคณิตแบบบิตได้อย่างมีประสิทธิภาพ เช่น การตัดกันและการรวมกัน[ 30 ]

อย่างไรก็ตาม มีปัญหามากมายเกี่ยวกับการแสดงฟิลด์บิตฟิลด์บิตอ่านยากกว่าค่าคงที่ enum int [ 30 ]นอกจากนี้ หากองค์ประกอบถูกแทนด้วยฟิลด์บิต ก็เป็นไปไม่ได้ที่จะวนซ้ำผ่านองค์ประกอบทั้งหมดเหล่านี้[ 30 ]

แนวทางทางเลือกที่แนะนำคือการใช้enum int แทนฟิลด์บิต[ 30 ]แนวทางนี้ใช้ enum เพื่อแสดงชุดค่าที่อยู่ในประเภท เดียวกัน [ 30 ]เนื่องจาก enum นี้ ใช้อินเทอร์เฟซและไม่จำเป็นต้องใช้การดำเนินการแบบบิตอีกต่อไป แนวทางนี้จึงปลอดภัยกว่าในแง่ของประเภท[ 30 ]นอกจากนี้ ยังมีโรงงานแบบคงที่หลายแห่งที่อนุญาตให้สร้างอินสแตนซ์ของวัตถุได้ เช่นเมธอด `import` [ 30 ]EnumSetEnumSetEnumEnumSetSetEnumSet.of()

หลังจากมีการนำ วิธี การแสดงฟิลด์บิตมาใช้ แล้ว วิธีการดังกล่าวถือว่าล้าสมัยไปแล้ว[ 30 ]EnumSet

คลาสHashSet

HashSetใช้ตารางแฮช โดยเฉพาะอย่างยิ่ง มันใช้ตารางแฮชjava.util.LinkedHashMapเพื่อจัดเก็บค่าแฮชและองค์ประกอบต่างๆ และเพื่อป้องกันการซ้ำซ้อน

คลาสLinkedHashSet

java.util.LinkedHashSetคลาสนี้ ขยายโครงสร้าง โดยการสร้างลิสต์แบบเชื่อมโยงสองทิศทาง ซึ่งเชื่อมโยงองค์ประกอบทั้งหมดตามลำดับการแทรก ทำให้มั่นใจได้ว่าลำดับการวนซ้ำในลิสต์นั้นสามารถคาดเดาได้HashSetSet

คลาสCopyOnWriteArraySet

CopyOnWriteArraySetเป็นการทดแทนแบบพร้อมกันสำหรับการซิงโครไนซ์โดยให้การทำงานพร้อมกันที่ดีขึ้นในหลายสถานการณ์โดยขจัดความจำเป็นในการทำการซิงโครไนซ์หรือสร้างสำเนาของวัตถุระหว่างการวนซ้ำ คล้ายกับที่ทำหน้าที่เป็นการทดแทนแบบพร้อมกันสำหรับการซิงโครไนซ์[ 31 ] ใน ทางกลับกัน เช่นเดียวกับไม่ควรใช้เมื่อการซิงโครไนซ์เป็นสิ่งจำเป็นSetCopyOnWriteArrayListListCopyOnWriteArrayListCopyOnWriteArraySet

อิน เทอร์เฟซSortedSet

อินjava.util.SortedSetเทอร์เฟซขยายอินjava.util.Setเทอร์เฟซ ต่างจากปกติSetองค์ประกอบในSortedSetจะถูกเรียงลำดับ ไม่ว่าจะโดยวิธีขององค์ประกอบcompareTo(T o)หรือวิธีที่จัดเตรียมไว้ในตัวสร้างของSortedSetองค์ประกอบแรกและสุดท้ายของSortedSetสามารถเรียกได้โดยใช้ วิธีการ first()และlast()ตามลำดับ และสามารถสร้างเซตย่อยได้ผ่านค่าต่ำสุดและสูงสุด รวมถึงการเริ่มต้นหรือสิ้นสุดที่จุดเริ่มต้นหรือจุดสิ้นสุดของคลาสSortedSetนี้ ใช้ อินเทอร์เฟซ[ 32 ]java.util.TreeSetSortedSet

อินjava.util.NavigableSetเทอร์เฟซขยายjava.util.SortedSetอินเทอร์เฟซและมีเมธอดเพิ่มเติมอีกเล็กน้อย เมธอดfloor(E e), ceiling(E e), lower(E e), และhigher(E e)จะค้นหาองค์ประกอบในชุดที่อยู่ใกล้กับพารามิเตอร์ นอกจากนี้ ยังมีตัววนซ้ำแบบลงล่างสำหรับรายการในSetอีกด้วย เช่นเดียวSortedSetกับjava.util.TreeSetใช้NavigableSetงาน[ 33 ]

คลาสTreeSet

java.util.TreeSetใช้ต้นไม้แดง-ดำที่ดำเนินการโดยjava.util.TreeMapต้นไม้แดง-ดำช่วยให้มั่นใจได้ว่าไม่มีรายการซ้ำ นอกจากนี้ยังช่วยให้สามารถTreeSetดำเนินการjava.util.SortedSetได้[ 34 ]

คลาสConcurrentSkipListSet

ConcurrentSkipListSetทำหน้าที่เป็นการทดแทนพร้อมกันสำหรับการใช้งานแบบซิงโครไนซ์ตัวอย่างเช่น มันจะแทนที่ที่ถูกห่อหุ้มด้วยเมธอด[ 35 ]SortedSetTreeSetsynchronizedMap

อินเทอร์เฟซแผนที่

แผนที่ถูกกำหนดโดยjava.util.Mapอินเทอร์เฟซในภาษา Java

การใช้งานอินเทอร์เฟซแผนที่

Mapแผนที่ (map) เป็นโครงสร้างข้อมูลที่เชื่อมโยงคีย์กับองค์ประกอบ ทำให้แผนที่มีความยืดหยุ่นสูง หากคีย์เป็นรหัสแฮชขององค์ประกอบ แผนที่นั้นก็Mapจะเป็นเหมือนแผนที่ แต่Setถ้าเป็นเพียงตัวเลขที่เพิ่มขึ้นเรื่อยๆ ก็จะกลายเป็นลิสต์

ตัวอย่างของการใช้งานได้แก่, , และ.Mapjava.util.HashMapjava.util.LinkedHashMapjava.util.TreeMap

คลาสAbstractMap

AbstractMapเป็นตัวอย่างของ การใช้ งานโครงร่าง[ 14 ]

คลาสย่อยโดยตรงของคลาส ได้แก่, , , , และ.AbstractMapConcurrentSkipListMapEnumMapHashMapIdentityHashMapTreeMapWeakHashMap

EnumMap

EnumMapขยาย. มีความเร็วเทียบเท่ากับอาร์เรย์ที่มีดัชนีตามลำดับ[ 36 ]ทั้งนี้เนื่องจากภายในใช้อาร์เรย์ โดยรายละเอียดการใช้งานถูกซ่อนไว้อย่างสมบูรณ์จากนักพัฒนา[ 36 ] ดังนั้น EnumMap จึงได้รับ ความปลอดภัย ของประเภทในขณะที่ได้เปรียบด้านประสิทธิภาพของอาร์เรย์[ 36 ]AbstractMapEnumMapEnumMapMap

แฮชแมป

HashMapใช้ตารางแฮช แฮชของคีย์จะถูกใช้เพื่อค้นหาองค์ประกอบในบัคเก็ตต่างๆ นี่คือคอลเลกชันแบบแฮช[ 37 ]HashMap

แผนที่แฮชลิงก์

LinkedHashMapขยายโดยการสร้างรายการเชื่อมโยงสองทางระหว่างองค์ประกอบ ทำให้สามารถเข้าถึงองค์ประกอบเหล่านั้นได้ตามลำดับที่แทรกเข้าไปในแผนที่ประกอบด้วยเมธอดซึ่งจะถูกเรียกโดยเมธอดเมื่อใดก็ตามที่มีการเพิ่มคีย์ใหม่ลงใน[ 38 ] จะลบรายการที่เก่าที่สุดเมื่อใดก็ตามที่ส่งค่ากลับเป็นจริง[ 38 ] เมธอด นี้สามารถเขียนทับได้[ 38 ]HashMapLinkedHashMapprotectedremoveEldestEntryputMapMapremoveEldestEntryremoveEldestEntry

แผนที่ต้นไม้

TreeMapตรงกันข้ามกับและใช้ต้นไม้สีแดง-ดำ คีย์ถูกใช้เป็นค่าสำหรับโหนดในต้นไม้ และโหนดชี้ไปยังองค์ประกอบใน[ 39 ]HashMapLinkedHashMapMap

แฮชแมปพร้อมกัน

ConcurrentHashMapคล้ายคลึงกับและเป็นชุดข้อมูลแบบแฮชเช่นกัน[ 37 ]อย่างไรก็ตาม มีความแตกต่างหลายประการ เช่น ความแตกต่างในกลยุทธ์การล็อกที่ใช้HashMap

ใช้กลยุทธ์การล็อกที่แตกต่างอย่างสิ้นเชิงเพื่อให้ปรับขนาดได้ดีขึ้นและทำงานพร้อมกันได้[ 37 ]ไม่ซิงโครไนซ์ทุกเมธอดโดยใช้ล็อกเดียวกัน[ 37 ]แต่ใช้กลไกที่เรียกว่าการแบ่งล็อก [ 37 ]กลไกนี้ให้กลไกการล็อกที่ละเอียดกว่า[ 37 ] นอกจากนี้ยังอนุญาตให้เข้าถึงร่วมกันได้ในระดับ ที่สูงขึ้น[ 37 ]ConcurrentHashMapConcurrentHashMapConcurrentHashMap

คลาสConcurrentSkipListMap

ConcurrentSkipListMapทำหน้าที่เป็นการทดแทนพร้อมกันสำหรับการใช้งานแบบซิงโครไนซ์มีความคล้ายคลึงกับมากเนื่องจากแทนที่ที่ถูกห่อหุ้มด้วยเมธอด[ 35 ]SortedMapConcurrentSkipListMapConcurrentSkipListSetConcurrentSkipListMapTreeMapsynchronizedMap

แมปซับอินเทอร์เฟซ

อินเทอร์เฟซSortedMap

อินjava.util.SortedMapเทอร์เฟซขยายอินjava.util.Mapเทอร์เฟซ อินเทอร์เฟซนี้กำหนดMapที่เรียงลำดับตามคีย์ที่ให้มา โดยใช้compareTo()เมธอดหรือเมธอดที่ให้มาในตัวสร้างของ อีกครั้ง SortedMapคู่คีย์-องค์ประกอบจะถูกเรียงลำดับตามคีย์ คีย์แรกและคีย์สุดท้ายในMapสามารถเรียกได้โดยใช้เมธอดfirstKey()และlastKey()ตามลำดับ นอกจากนี้ แผนที่ย่อยสามารถสร้างได้จากคีย์ต่ำสุดและสูงสุดโดยใช้K) subMap(K fromKey, K toKey)เมธอดSortedMapถูกนำไปใช้java.util.TreeMapโดย[ 40 ]

อินjava.util.NavigableMapเทอร์เฟซขยายได้java.util.SortedMapหลายวิธี สามารถเรียกเมธอดที่ค้นหาคีย์หรือรายการแผนที่ที่ใกล้เคียงที่สุดกับคีย์ที่กำหนดในทิศทางใดก็ได้ แผนที่ยังสามารถกลับด้านได้ และสามารถสร้างตัววนซ้ำในลำดับย้อนกลับจากแผนที่ได้ มันถูกนำไปใช้โดยjava.util.TreeMap. [ 41 ]

อินเทอร์เฟซConcurrentMap

อินjava.util.concurrent.ConcurrentMapเทอร์เฟซขยายjava.util.Mapอินเทอร์เฟซ อินเทอร์เฟซนี้เป็นอินเทอร์เฟซที่ปลอดภัยต่อเธรด ซึ่งเปิดตัวใน Java Collections Frameworkเวอร์ชัน 1.5 ของภาษาการเขียนโปรแกรม Java [ 20 ]Map

ส่วนขยายของเฟรมเวิร์กคอลเลกชันของ Java

เฟรมเวิร์กคอลเลกชันของ Java ได้รับการขยายโดย ไลบรารี Apache Commons Collections ซึ่งเพิ่มประเภทคอลเลกชัน เช่น bag และแผนที่แบบสองทิศทาง รวมถึงยูทิลิตี้สำหรับการสร้างยูเนียนและอินเตอร์เซกชัน[ 42 ]

Google ได้เปิดตัวคลังคอลเลกชันของตนเองซึ่งเป็นส่วนหนึ่งของคลัง Guavaแล้ว

ดูเพิ่มเติม

Citation

  1. "Lesson: Introduction to Collections". Oracle Corporation. Retrieved 2010-12-22.
  2. 123Bloch 2018, pp. 126–129, Chapter §5 Item 28: Prefer lists to arrays.
  3. 12Horstmann, Cay (2014). Big Java Early Objects.
  4. 12"Java Collections Framework"(PDF). IBM. Archived from the original(PDF) on 2011-08-07.
  5. Becker, Dan (November 1, 1998). "Get started with the Java Collections Framework". JavaWorld. Retrieved 2020-07-13. Before Collections made its most welcome debut, the standard methods for grouping Java objects were via the array, the Vector, and the Hashtable. All three of these collections have different methods and syntax for accessing members: arrays use the square bracket ([]) symbols, Vector uses the elementAt method, and Hashtable uses get and put methods.
  6. 12Lea, Doug. "Overview of the collections Package". Retrieved 2011-01-01. The Sun Java Development Kit JDK1.2 finally includes a standard set of collection classes. While there are some design and implementation differences, the JDK1.2 package contains most of the same basic abstractions, structure, and functionality as this package. For this reason, this collections package will NOT be further updated
  7. "Generic Collection Library for Java™". Archived from the original on 2009-03-12. Retrieved 2011-01-01.
  8. Vanhelsuwé, Laurence (June 1, 1997). "Need a good set of abstract data structures? ObjectSpace's JGL packs a punch!". JavaWorld. Retrieved 2020-07-13. As with Java itself, the Java Generic Library borrows heavily from the C++ camp: It takes the best from C++'s STL, while leaving the C++ warts behind. Most C++ programmers today will know of their STL, but few are managing to exploit its potential.
  9. Vanhelsuwé, Laurence (1 มกราคม 1999). "การต่อสู้ของเฟรมเวิร์กคอนเทนเนอร์: คุณควรใช้อันไหน?" . JavaWorld . สืบค้นเมื่อ13 กรกฎาคม 2020 . การเปรียบเทียบ JGL ของ ObjectSpace Inc. และ Collections Framework ของ Sun ดูเหมือนจะเป็นการเปรียบเทียบแอปเปิ้ลกับกีวี ในแง่แรก เฟรมเวิร์กทั้งสองดูเหมือนจะแข่งขันกันเพื่อแย่งชิงนักพัฒนากลุ่มเดียวกัน แต่หลังจากตรวจสอบอย่างละเอียดแล้ว จะเห็นได้ชัดว่าไม่สามารถเปรียบเทียบกันได้อย่างยุติธรรมหากไม่ยอมรับก่อนว่าเฟรมเวิร์กทั้งสองมีเป้าหมายที่แตกต่างกัน หาก Collections จะทำให้ API ของ Sun (API หลัก ส่วนขยาย ฯลฯ) เป็นมาตรฐานเดียวกัน ดังที่เอกสารของ Sun ระบุไว้ แสดงว่า Collections ต้องเป็นข่าวดีและเป็นสิ่งที่ดี แม้แต่สำหรับผู้ที่คลั่งไคล้ JGL มากที่สุด ตราบใดที่ Sun ไม่ผิดสัญญาในส่วนนี้ ผมยินดีที่จะลงทุนทรัพยากรของผมในการนำ Collections มาใช้อย่างจริงจัง
  10. Lea, Doug . "ภาพรวมของแพ็กเกจ util.concurrent เวอร์ชัน 1.3.4" . สืบค้นเมื่อ2011-01-01 . หมายเหตุ: เมื่อมีการออก J2SE 5.0 แพ็กเกจนี้จะเข้าสู่โหมดการบำรุงรักษา: จะมีการเผยแพร่เฉพาะการแก้ไขที่จำเป็นเท่านั้น แพ็กเกจ java.util.concurrent ใน J2SE5 ประกอบด้วยเวอร์ชันที่ได้รับการปรับปรุง มีประสิทธิภาพมากขึ้น และเป็นมาตรฐานของส่วนประกอบหลักในแพ็กเกจนี้
  11. Bloch 2018 , หน้า 87–92, บทที่ 8 ข้อ 8: เลือกใช้การประกอบมากกว่าการสืบทอด
  12. "Iterable (Java Platform SE 7)" . Docs.oracle.com. 2013-06-06 . สืบค้นเมื่อ2013-08-16 .
  13. Bloch 2018 , หน้า 117–122, บทที่ §5 ข้อ 26: อย่าใช้ชนิดข้อมูลดิบ
  14. 1 2 3 Bloch 2018 , หน้า 99–103, บทที่ §4 ข้อ 20: ควรใช้อินเทอร์เฟซมากกว่าคลาสแบบนามธรรม
  15. "รายการ (Java Platform SE 7)" . Docs.oracle.com. 2013-06-06 . สืบค้นเมื่อ2013-08-16 .
  16. 1 2 Bloch 2018 , หน้า 87–92, บทที่ §4 ข้อ 18: ให้ความสำคัญกับการประกอบมากกว่าการสืบทอด
  17. 1 2 3 Bloch 2018 , หน้า 317–322, บทที่ 11 ข้อ 79: หลีกเลี่ยงการซิงโครไนซ์มากเกินไป
  18. 1 2 Bloch 2018 , หน้า 280–281, บทที่ §9 ข้อ 64: อ้างอิงถึงวัตถุโดยใช้อินเทอร์เฟซของวัตถุเหล่านั้น
  19. "PriorityQueue (Java Platform SE 7)" . Docs.oracle.com. 2013-06-06 . สืบค้นเมื่อ2013-08-16 .
  20. 1 2 3 Goetz et al. 2006 , หน้า 84–85, §5.2 การรวบรวมพร้อมกัน
  21. 1 2 3 Goetz et al. 2006 , หน้า 52–53, §3.5.3 สำนวนการเผยแพร่ที่ปลอดภัย
  22. Bloch 2018 , หน้า 325–329, บทที่ 11 ข้อ 78: ประสานการเข้าถึงข้อมูลที่สามารถเปลี่ยนแปลงได้ร่วมกัน
  23. "BlockingQueue (Java Platform SE 7)" . Docs.oracle.com. 2013-06-06 . สืบค้นเมื่อ2013-08-16 .
  24. Bloch 2018 , หน้า 325–329, บทที่ 11 ข้อ 81: ควรเลือกใช้ยูทิลิตี้การทำงานพร้อมกันเพื่อรอและแจ้งเตือน
  25. 1 2 Goetz et al. 2006 , หน้า 92, §5.3.3 Deques และการขโมยงาน
  26. "Deque (Java Platform SE 7)" . Docs.oracle.com. 2013-06-06 . สืบค้นเมื่อ2013-08-16 .
  27. 1 2 "คิว (Java Platform SE 7)" . Docs.oracle.com. 2013-06-06 . สืบค้นเมื่อ2013-08-16 .
  28. "BlockingDeque (Java Platform SE 7)" . Docs.oracle.com. 2013-06-06 . สืบค้นเมื่อ2013-08-16 .
  29. 1 2 3 4 5 Bloch 2018 , หน้า 5–9, บทที่ §5 ใช้ EnumSet แทนฟิลด์บิต
  30. 1 2 3 4 5 6 7 8 9 10 11 Bloch 2018 , หน้า 169–170, บทที่ §5 ใช้ EnumSet แทนฟิลด์บิต
  31. เกิทซ์ และคณะ 2006หน้า 86–89, §5.2.3 CopyOnWriteArrayList
  32. "SortedSet (Java Platform SE 7)" . Docs.oracle.com. 2013-06-06 . สืบค้นเมื่อ2013-08-16 .
  33. "NavigableSet (แพลตฟอร์ม Java SE 7) " Docs.oracle.com 06-06-2013.
  34. "Set (Java Platform SE 7)" . Docs.oracle.com. 2013-06-06 . สืบค้นเมื่อ2013-08-16 .
  35. 1 2 Goetz et al. 2006 , หน้า 84–85, §5.2 ConcurrentCollections.
  36. 1 2 3 Bloch 2018 , หน้า 171–175, บทที่ §6 ข้อ 36: ใช้ EnumMap แทนการจัดทำดัชนีตามลำดับ
  37. 1 2 3 4 5 6 7 Goetz et al. 2006 , หน้า 85–86, §5.2.1 ConcurrentHashMap.
  38. 1 2 3 Bloch 2018 , หน้า 199–202, บทที่ §44 สนับสนุนการใช้อินเทอร์เฟซฟังก์ชันมาตรฐาน
  39. "แผนที่ (Java Platform SE 7)" . Docs.oracle.com. 2013-06-06 . สืบค้นเมื่อ2013-08-16 .
  40. "SortedMap (Java Platform SE 7)" . Docs.oracle.com. 2013-06-06 . สืบค้นเมื่อ2013-08-16 .
  41. "NavigableMap (Java Platform SE 7)" . Docs.oracle.com. 2013-06-06 . สืบค้นเมื่อ2013-08-16 .
  42. "คอลเลกชัน - หน้าแรก" . Commons.apache.org. 4 กรกฎาคม 2013. สืบค้นเมื่อ16 สิงหาคม 2013 .

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ไม่มีชื่อบทความ

เฟรมเวิร์กคอลเลกชัน ของ Java คือชุดของ คลาส และ อินเทอร์เฟซ ที่ใช้ โครงสร้างข้อมูล คอลเลกชันที่นำกลับมาใช้ซ้ำได้ทั่วไป ( คอลเลกชัน ) [ 1 ]

ความแตกต่างจากอาร์เรย์

Collection โครงสร้างข้อมูลแบบอาร์เรย์และแบบออบเจ็กต์มีความคล้ายคลึงกันตรงที่ทั้งสองเก็บการอ้างอิงถึงออบเจ็กต์และสามารถจัดการได้เป็นกลุ่ม อย่างไรก็ตาม ต่างจากอาร์เรย์ โครงสร้างข้อมูลแบบออบ Collection เจ็กต์ไม่จำเป็นต้องกำหนดความจุที่แน่นอนเมื่อสร้างขึ้น...

ประวัติศาสตร์

การใช้งานคอลเลกชันในแพลตฟอร์ม Java เวอร์ชันก่อน JDK 1.2 ประกอบด้วยคลาสโครงสร้างข้อมูลเพียงไม่กี่คลาส แต่ไม่มีเฟรมเวิร์กคอลเลกชัน [ 4 ] วิธีมาตรฐานสำหรับการจัดกลุ่มวัตถุ Java คือผ่านอาร์เรย์ Vector และ Hashtable คลาส ซึ่งน่าเสียดายที่ไม่สามารถขยายได้ง่าย...

สถาปัตยกรรม

คอลเลกชันส่วนใหญ่ใน Java ที่ไม่ใช่แมปนั้นได้มาจาก java.util.Collection อินเทอร์เฟซ Collection ซึ่งกำหนดส่วนประกอบพื้นฐานของคอลเลกชันทั้งหมด