ในขณะที่บางคนอาจเกลียด "วิธีการเลือก" พวกเขาอาจมีความหมายที่ดีกว่าอินเทอร์เฟซที่แยกสูง เหนือสิ่งอื่นใดพวกมันยอมให้ความเป็นไปได้ที่วัตถุจะได้รับความสามารถหรือคุณสมบัติในช่วงชีวิตของมันหรือว่าวัตถุ (โดยเฉพาะอย่างยิ่งวัตถุที่ห่อหุ้ม) อาจไม่รู้ว่ามันถูกสร้างขึ้นเมื่อใด
ในขณะที่ฉันแทบจะเรียก Java เรียนคอลเลกชัน paragons ของการออกแบบที่ดีผมขอแนะนำว่ากรอบคอลเลกชันที่ดีควรมีพื้นฐานเป็นจำนวนมากของตัวเลือกวิธีการพร้อมกับวิธีการขอเก็บรวบรวมเกี่ยวกับลักษณะและความสามารถของตน การออกแบบดังกล่าวจะอนุญาตให้ใช้คลาส wrapper เดียวกับคอลเลกชันขนาดใหญ่ที่หลากหลายโดยไม่ปิดบังความสามารถโดยไม่ตั้งใจซึ่งคอลเล็กชันต้นแบบอาจมีอยู่ หากวิธีการไม่ได้เป็นตัวเลือกก็จำเป็นต้องมีคลาส wrapper ที่แตกต่างกันสำหรับการรวมกันของฟีเจอร์ที่คอลเลกชันอาจสนับสนุนหรือมิฉะนั้นจะมี wrapper บางตัวที่ใช้ไม่ได้ในบางสถานการณ์
ตัวอย่างเช่นถ้าคอลเลกชันรองรับการเขียนไอเท็มตามดัชนีหรือการต่อท้ายรายการ แต่ไม่รองรับการแทรกไอเท็มที่อยู่ตรงกลางโค้ดที่ต้องการห่อหุ้มมันใน wrapper ซึ่งจะบันทึกการทำงานทั้งหมดที่ทำไว้จะต้องมีเวอร์ชัน ของ wrapper การล็อกซึ่งจัดเตรียมไว้สำหรับการรวมกันของความสามารถที่รองรับหรือหากไม่มีให้ใช้จะต้องใช้ wrapper ที่สนับสนุนการผนวกหรือเขียนโดยดัชนี แต่ไม่ใช่ทั้งสองอย่าง อย่างไรก็ตามหากอินเตอร์เฟสรวบรวมแบบรวมให้ทั้งสามวิธีเป็น "ทางเลือก" แต่รวมวิธีการเพื่อระบุว่าวิธีการทางเลือกใดที่จะใช้งานได้จากนั้นคลาส wrapper เดียวสามารถจัดการกับคอลเลกชันที่ใช้คุณสมบัติต่างๆ เมื่อถูกถามว่าคุณสมบัติใดที่รองรับตัวห่อหุ้มก็สามารถรายงานสิ่งที่คอลเลกชันที่ห่อหุ้มนั้นรองรับได้
โปรดทราบว่าการดำรงอยู่ของ "ความสามารถเสริม" ในบางกรณีอาจอนุญาตให้มีการรวบรวมคอลเลกชันเพื่อใช้งานบางอย่างในรูปแบบที่มีประสิทธิภาพมากกว่าที่จะเป็นไปได้หากความสามารถนั้นถูกกำหนดโดยการใช้งาน ตัวอย่างเช่นสมมติว่ามีconcatenate
การใช้วิธีการในการรวบรวมคอมโพสิตจากสองวิธีแรกเกิดขึ้นเป็น ArrayList ที่มี 1,000,000 องค์ประกอบและสุดท้ายคือการรวบรวมยี่สิบองค์ประกอบซึ่งสามารถทำซ้ำได้ตั้งแต่เริ่มต้นเท่านั้น หากการรวบรวมคอมโพสิตถูกถามสำหรับองค์ประกอบ 1,000,013 (ดัชนี 1,000,012) ก็สามารถถาม ArrayList ว่ามีรายการจำนวนเท่าใด (เช่น 1,000,000) ลบออกจากดัชนีที่ร้องขอ (ให้ผล 12) อ่านและข้ามองค์ประกอบสิบสองจากวินาที แล้วกลับองค์ประกอบต่อไป
ในสถานการณ์เช่นนี้แม้ว่าการรวบรวมคอมโพสิตจะไม่มีวิธีการคืนค่าดัชนีโดยทันที แต่การขอให้การรวบรวมคอมโพสิตสำหรับรายการที่ 1,000,013 ยังคงเร็วกว่าการอ่าน 1,000,013 รายการจากมันทีละรายการและไม่สนใจทั้งหมด แต่สุดท้าย หนึ่ง.