การแนะนำ
เกือบทุกโปรแกรมจำเป็นต้องเก็บข้อมูลไว้บางชุด อาจเป็นสตริงและตัวเลข วัตถุ และอื่นๆ อาร์เรย์เป็นโซลูชันการจัดเก็บข้อมูลที่ยอดเยี่ยม แต่อาร์เรย์มีข้อจำกัดบางประการ ตัวอย่างเช่น ขนาดคงที่ ไม่สามารถลบองค์ประกอบ และคุณไม่สามารถแทรกองค์ประกอบตรงกลาง คอลเลกชันถูกสร้างขึ้นเพื่อแก้ไขข้อจำกัดเหล่านี้และอื่นๆ คอลเล็กชันทุกประเภท (และยังมีอีกมากมาย ดังที่เราจะได้เห็นในบทเรียนนี้ในภายหลัง) มีความสามารถในการปรับขนาดตัวเองแบบไดนามิก คอลเลกชันบางประเภทสามารถจัดเก็บองค์ประกอบที่สั่งซื้อและวางองค์ประกอบใหม่ตามลำดับโดยอัตโนมัติเมื่อมีการเพิ่ม
ในบทเรียนนี้ เราจะทำความคุ้นเคยกับลำดับชั้นของคอลเล็กชันพื้นฐานในJava Collections Framework นอกจากนี้ยังมีไลบรารีทางเลือกต่างๆ ที่ขยายขีดความสามารถของJava Collections Framework มาตรฐาน ที่นิยมมากที่สุดคือGuava (Google Collections Library)
อินเทอร์เฟซพื้นฐาน
ไดอะแกรมแสดงว่ามีอินเทอร์เฟซพื้นฐานสองอินเทอร์เฟซที่นำมาใช้เพื่อสร้างคลาสและอินเทอร์เฟซที่เหลือ
มาดูอินเทอร์เฟซเหล่านี้กัน:
-
คอลเลกชัน — คอลเลกชันทั่วไปที่มีชุดขององค์ประกอบ (วัตถุ) คอลเลกชันนี้มีวิธีการพื้นฐานสำหรับการทำงานกับองค์ประกอบ: แทรก (เพิ่ม , addAll ) ลบ (ลบ , removeAll ,ล้าง ) ค้นหา (มี ,มีทั้งหมด ) ตรวจสอบว่าคอลเลกชันว่างเปล่า ( isEmpty ) และรับขนาด ( size )
-
แผนที่ — คอลเลกชันที่มีโครงสร้างเป็นคู่คีย์-ค่า นอกจากนี้ แต่ละคีย์ในแผนที่จะไม่ซ้ำกัน: ไม่มีสองคีย์ที่มีค่าเหมือนกัน คอล เลกชันนี้บางครั้งเรียกว่าพจนานุกรม แผนที่เป็นอินเทอร์เฟซแยกต่างหาก ไม่ได้ใช้เท อร์เฟ ซ Collectionแต่เป็นส่วนหนึ่งของ Java Collections Framework
วิธีการที่เป็นประโยชน์สำหรับการทำงานกับองค์ประกอบในแผนที่ :
-
แทรก ( ใส่ , ใส่ทั้งหมด )
-
รับ ( รับ , keySet , ค่า , entrySet )
-
ลบ ( ลบ , ลบ )
-
ค้นหา ( มีคีย์ , มีค่า )
-
ตรวจสอบว่าคอลเลกชันว่างเปล่า ( isEmpty )
-
รับขนาด ( ขนาด )
ตอนนี้เรามาพูดถึงแต่ละเรื่องกันดีกว่า
อินเทอร์เฟซคอลเลกชัน
อิน เทอร์เฟซ Collectionขยาย อินเทอร์เฟซ Iterableซึ่งมีเมธอดเดียว: iterator( ) สำหรับเรา นี่หมายความว่าคอลเลกชั่นใดๆ ที่สืบทอดIterableจะสามารถคืนค่า iterator ได้
ตัววนซ้ำเป็นวัตถุพิเศษที่คุณสามารถใช้เพื่อเข้าถึงองค์ประกอบของคอลเลกชันใดๆ โดยไม่คำนึงถึงการใช้งานที่เฉพาะเจาะจง
รูปภาพแสดงให้เห็นว่า 3 อินเทอร์เฟซสืบทอด อิน เทอร์เฟซคอลเล็กชันได้แก่List , QueueและSet ตอนนี้เราจะดูแต่ละรายการโดยสังเขป
รายการเป็นคอลเลกชันที่เรียงลำดับซึ่งอนุญาตให้มีค่าซ้ำกัน คุณลักษณะเฉพาะของรายการคือองค์ประกอบของรายการมีหมายเลขและสามารถเข้าถึงได้ด้วยหมายเลข (ดัชนี)
คิว จัดเก็บองค์ประกอบตาม ลำดับที่เพิ่มลงในคิว
ไม่เหมือนรายการ เซตแสดงถึงคอลเลกชันที่ไม่มีลำดับซึ่งไม่อนุญาตให้มีองค์ประกอบซ้ำ อิน เทอร์ เฟซชุดสอดคล้องกับแนวคิดของชุด ทางคณิตศาสตร์
การใช้งานอินเทอร์เฟซแผนที่
เราจะเห็นว่า อินเทอร์เฟซ แผนที่แสดงการจับคู่ระหว่างคีย์และค่าเฉพาะ
interface Map<K, V>
โดยที่Kคือประเภทของคีย์ และVคือประเภทของค่าที่เก็บไว้
เราสามารถ ดึง ข้อมูลจาก แผนที่โดยใช้กุญแจ ในการเพิ่มองค์ประกอบในแผนที่เราต้องระบุคีย์และค่า
มาดูการใช้งานMap กันบ้าง :
-
HashMapคือการนำแผนที่ ไปใช้ โดยยึดตามตารางแฮช สามารถจัดเก็บคีย์และค่าประเภทใดก็ได้ รวมถึง null ไม่รับประกันลำดับขององค์ประกอบ
-
LinkedHashMapเป็นโครงสร้างข้อมูลที่จัดเก็บข้อมูลเป็นรายการองค์ประกอบที่เชื่อมโยง องค์ประกอบต่างๆ จะปรากฏในรายการตามลำดับที่เพิ่มเข้ามา
-
TreeMapใช้ อินเทอร์เฟ ซ SortedMap (ผ่าน อินเทอร์เฟ ซ NavigableMap ) องค์ประกอบในโครงสร้างนี้จะถูกจัดเก็บตามลำดับการจัดเรียง (เมื่อมีการเพิ่มองค์ประกอบใหม่ คอลเลกชันจะถูกจัดเรียงโดยอัตโนมัติ) TreeMapนั้นยอดเยี่ยมสำหรับการจัดเก็บข้อมูลที่เรียงลำดับจำนวนมากพร้อมการดึงข้อมูลที่รวดเร็ว
คอลเลกชันที่ล้าสมัย:
Java มีคอลเล็กชันที่ล้าสมัยจากเวอร์ชันก่อนหน้า (เพื่อรักษาความเข้ากันได้ย้อนหลัง) คอลเลกชันเก่าเหล่านี้ไม่ควรใช้ในรหัสใหม่:
-
การแจงนับ — คล้ายกับ อินเทอร์เฟ ซ Iterator ;
-
เวกเตอร์ — รายการองค์ประกอบที่เรียงลำดับและคล้ายคลึงกับคลาส ArrayList
-
สแต็ก — การดำเนินการตามโครงสร้างข้อมูลสแต็ก ซึ่งจัดเก็บและจัดการองค์ประกอบต่างๆ เช่น วิธีที่คุณจะโต้ตอบกับหนังสือสแต็ก มีวิธีการเพิ่มองค์ประกอบลงในสแต็ก ( push ) และถอดออก ( pop );
-
พจนานุกรม — คล้ายกับ ส่วนต่อประสาน แผนที่แต่เป็นคลาสนามธรรม
-
Hashtable — คล้ายกับ HashMap
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับCollections Frameworkได้ในบทความนี้
GO TO FULL VERSION