तकनीकी विचारों, विशेष रूप से प्रदर्शन के आधार पर, बहुत सारे उत्तर दिए गए हैं। मेरे अनुसार, चुनाव TreeSet
और HashSet
मामलों के बीच का चुनाव ।
लेकिन मैं कहूंगा कि चुनाव को पहले वैचारिक विचारों से प्रेरित होना चाहिए ।
यदि, वस्तुओं के लिए आपकी हेरफेर करने की आवश्यकता है, तो एक प्राकृतिक आदेश का कोई मतलब नहीं है, फिर उपयोग न करें TreeSet
।
यह एक क्रमबद्ध सेट है, क्योंकि यह लागू होता है SortedSet
। तो इसका मतलब है कि आपको फ़ंक्शन को ओवरराइड करने की आवश्यकता होगी 0 न केवल तब जब दो ऑब्जेक्ट एक ही छात्र का प्रतिनिधित्व करेंगे, बल्कि यह भी कि जब दो अलग-अलग छात्रों के पास एक ही ग्रेड है। दूसरे मामले के लिए,compareTo
, जो कि रिटर्न फ़ंक्शन के अनुरूप होना चाहिए , क्योंकि छात्रों के बीच कोई प्राकृतिक आदेश नहीं है। आप उन्हें उनके औसत ग्रेड द्वारा ऑर्डर कर सकते हैं, ठीक है, लेकिन यह "प्राकृतिक ऑर्डरिंग" नहीं है। समारोहequals
। उदाहरण के लिए यदि आपके पास छात्र नामक कक्षा की वस्तुओं का एक सेट है, तो मुझे नहीं लगता कि एTreeSet
compareTo
equals
गलत हो जाएगा (जब तक कि आप बाद के रिटर्न को सच करने का निर्णय नहीं लेते हैं जब दो अलग-अलग छात्रों के पास एक ही ग्रेड होता है, जो equals
फ़ंक्शन को एक भ्रामक अर्थ देगा, गलत अर्थ कहने के लिए नहीं।)
कृपया इस निरंतरता के बीच ध्यान दें equals
और compareTo
वैकल्पिक है, लेकिन दृढ़ता से। की सिफारिश की। अन्यथा इंटरफ़ेस का अनुबंधSet
का टूट गया है, जिससे आपका कोड अन्य लोगों को गुमराह कर रहा है, इस प्रकार संभवतः अप्रत्याशित व्यवहार भी हो सकता है।
यह लिंक इस प्रश्न के बारे में जानकारी का एक अच्छा स्रोत हो सकता है।