Java Collections Framework

โมดูล 1
ระดับ , บทเรียน
มีอยู่

การแนะนำ

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

ในบทเรียนนี้ เราจะทำความคุ้นเคยกับลำดับชั้นของคอลเล็กชันพื้นฐานในJava Collections Framework นอกจากนี้ยังมีไลบรารีทางเลือกต่างๆ ที่ขยายขีดความสามารถของJava Collections Framework มาตรฐาน ที่นิยมมากที่สุดคือGuava (Google Collections Library)

* อินเทอร์เฟซและคลาสทั้งหมดไม่ได้แสดงในไดอะแกรม บางส่วนถูกละไว้เพื่อให้เข้าใจง่ายขึ้น

อินเทอร์เฟซพื้นฐาน

ไดอะแกรมแสดงว่ามีอินเทอร์เฟซพื้นฐานสองอินเทอร์เฟซที่นำมาใช้เพื่อสร้างคลาสและอินเทอร์เฟซที่เหลือ

มาดูอินเทอร์เฟซเหล่านี้กัน:

  1. คอลเลกชัน — คอลเลกชันทั่วไปที่มีชุดขององค์ประกอบ (วัตถุ) คอลเลกชันนี้มีวิธีการพื้นฐานสำหรับการทำงานกับองค์ประกอบ: แทรก (เพิ่ม , addAll ) ลบ (ลบ , removeAll ,ล้าง ) ค้นหา (มี ,มีทั้งหมด ) ตรวจสอบว่าคอลเลกชันว่างเปล่า ( isEmpty ) และรับขนาด ( size )

  2. แผนที่ — คอลเลกชันที่มีโครงสร้างเป็นคู่คีย์-ค่า นอกจากนี้ แต่ละคีย์ในแผนที่จะไม่ซ้ำกัน: ไม่มีสองคีย์ที่มีค่าเหมือนกัน คอล เลกชันนี้บางครั้งเรียกว่าพจนานุกรม แผนที่เป็นอินเทอร์เฟซแยกต่างหาก ไม่ได้ใช้เท อร์เฟ ซ Collectionแต่เป็นส่วนหนึ่งของ Java Collections Framework

วิธีการที่เป็นประโยชน์สำหรับการทำงานกับองค์ประกอบในแผนที่ :

  • แทรก ( ใส่ , ใส่ทั้งหมด )

  • รับ ( รับ , keySet , ค่า , entrySet )

  • ลบ ( ลบ , ลบ )

  • ค้นหา ( มีคีย์ , มีค่า )

  • ตรวจสอบว่าคอลเลกชันว่างเปล่า ( isEmpty )

  • รับขนาด ( ขนาด )

ตอนนี้เรามาพูดถึงแต่ละเรื่องกันดีกว่า

อินเทอร์เฟซคอลเลกชัน

อิน เทอร์เฟซ Collectionขยาย อินเทอร์เฟซ Iterableซึ่งมีเมธอดเดียว: iterator( ) สำหรับเรา นี่หมายความว่าคอลเลกชั่นใดๆ ที่สืบทอดIterableจะสามารถคืนค่า iterator ได้

ตัววนซ้ำเป็นวัตถุพิเศษที่คุณสามารถใช้เพื่อเข้าถึงองค์ประกอบของคอลเลกชันใดๆ โดยไม่คำนึงถึงการใช้งานที่เฉพาะเจาะจง

รูปภาพแสดงให้เห็นว่า 3 อินเทอร์เฟซสืบทอด อิน เทอร์เฟซคอลเล็กชันได้แก่List , QueueและSet ตอนนี้เราจะดูแต่ละรายการโดยสังเขป

รายการเป็นคอลเลกชันที่เรียงลำดับซึ่งอนุญาตให้มีค่าซ้ำกัน คุณลักษณะเฉพาะของรายการคือองค์ประกอบของรายการมีหมายเลขและสามารถเข้าถึงได้ด้วยหมายเลข (ดัชนี)

คิว จัดเก็บองค์ประกอบตาม ลำดับที่เพิ่มลงในคิว

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

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

เราจะเห็นว่า อินเทอร์เฟซ แผนที่แสดงการจับคู่ระหว่างคีย์และค่าเฉพาะ


interface Map<K, V>

โดยที่Kคือประเภทของคีย์ และVคือประเภทของค่าที่เก็บไว้

เราสามารถ ดึง ข้อมูลจาก แผนที่โดยใช้กุญแจ ในการเพิ่มองค์ประกอบในแผนที่เราต้องระบุคีย์และค่า

มาดูการใช้งานMap กันบ้าง :

  1. HashMapคือการนำแผนที่ ไปใช้ โดยยึดตามตารางแฮช สามารถจัดเก็บคีย์และค่าประเภทใดก็ได้ รวมถึง null ไม่รับประกันลำดับขององค์ประกอบ

  2. LinkedHashMapเป็นโครงสร้างข้อมูลที่จัดเก็บข้อมูลเป็นรายการองค์ประกอบที่เชื่อมโยง องค์ประกอบต่างๆ จะปรากฏในรายการตามลำดับที่เพิ่มเข้ามา

  3. TreeMapใช้ อินเทอร์เฟ ซ SortedMap (ผ่าน อินเทอร์เฟ ซ NavigableMap ) องค์ประกอบในโครงสร้างนี้จะถูกจัดเก็บตามลำดับการจัดเรียง (เมื่อมีการเพิ่มองค์ประกอบใหม่ คอลเลกชันจะถูกจัดเรียงโดยอัตโนมัติ) TreeMapนั้นยอดเยี่ยมสำหรับการจัดเก็บข้อมูลที่เรียงลำดับจำนวนมากพร้อมการดึงข้อมูลที่รวดเร็ว

คอลเลกชันที่ล้าสมัย:

Java มีคอลเล็กชันที่ล้าสมัยจากเวอร์ชันก่อนหน้า (เพื่อรักษาความเข้ากันได้ย้อนหลัง) คอลเลกชันเก่าเหล่านี้ไม่ควรใช้ในรหัสใหม่:

  • การแจงนับ — คล้ายกับ อินเทอร์เฟ ซ Iterator ;

  • เวกเตอร์ — รายการองค์ประกอบที่เรียงลำดับและคล้ายคลึงกับคลาส ArrayList

  • สแต็ก — การดำเนินการตามโครงสร้างข้อมูลสแต็ก ซึ่งจัดเก็บและจัดการองค์ประกอบต่างๆ เช่น วิธีที่คุณจะโต้ตอบกับหนังสือสแต็ก มีวิธีการเพิ่มองค์ประกอบลงในสแต็ก ( push ) และถอดออก ( pop );

  • พจนานุกรม — คล้ายกับ ส่วนต่อประสาน แผนที่แต่เป็นคลาสนามธรรม

  • Hashtable — คล้ายกับ HashMap

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับCollections Frameworkได้ในบทความนี้

ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION