เหตุผลที่ใช้กันมากที่สุดHashSet
คือการใช้งานคือ (โดยเฉลี่ย) O (1) แทนที่จะเป็น O (log n) หากชุดประกอบด้วยรายการมาตรฐานคุณจะไม่ "ยุ่งกับฟังก์ชันแฮช" ตามที่ได้ทำเพื่อคุณ หากตั้งมีชั้นเรียนที่กำหนดเองคุณต้องใช้hashCode
การใช้งานHashSet
(ถึงแม้จะแสดงให้เห็นว่ามีผลบังคับใช้ Java วิธี) แต่ถ้าคุณใช้TreeSet
คุณจะต้องทำมันหรืออุปทานComparable
Comparator
นี่อาจเป็นปัญหาหากคลาสไม่มีคำสั่งซื้อเฉพาะ
บางครั้งฉันเคยใช้TreeSet
(หรือจริง ๆTreeMap
) สำหรับชุด / แผนที่ขนาดเล็กมาก (<10 รายการ) แม้ว่าฉันจะไม่ได้ตรวจสอบเพื่อดูว่ามีผลประโยชน์จริงในการทำเช่นนั้นหรือไม่ สำหรับชุดใหญ่ความแตกต่างอาจมีความสำคัญ
ตอนนี้ถ้าคุณต้องการเรียงแล้วก็TreeSet
มีความเหมาะสมแม้ว่าถึงแม้จะมีการปรับปรุงบ่อยครั้งและความต้องการผลลัพธ์เรียงไม่บ่อยนักบางครั้งการคัดลอกเนื้อหาไปยังรายการหรืออาร์เรย์และเรียงลำดับได้เร็วขึ้น