शानदार सवाल और शानदार जवाब। बस मैंने सोचा कि कुछ बिंदुओं को ध्यान में रखूंगा:
- यदि आपके संग्रह को क्रमबद्ध किया जाना है, उदाहरण के लिए, एक विधि के तर्क के रूप में उपयोग किया जाता है, और आपको विधि के भीतर क्रमबद्ध सूची की आवश्यकता है, तो संग्रह (संग्रह) का उपयोग करें। या अगर यह लंबे समय से जीवित वस्तु है, लेकिन आपको इसे बहुत कम करने की आवश्यकता है।
औचित्य: सॉर्ट किए गए संग्रह को कुछ विशिष्ट के लिए आवश्यक है, और आप शायद बहुत बार जोड़ या हटा नहीं पाएंगे। तो आप संग्रह में तत्वों के बारे में वास्तव में परवाह नहीं करते हैं, क्योंकि यह एक बार हल हो जाता है। आप मूल रूप से:
सॉर्ट -> इसका उपयोग करें -> भूल जाओ
यदि आप सॉर्ट किए गए संग्रह में एक नया तत्व जोड़ते हैं, तो आपको फिर से संग्रह को सॉर्ट करना होगा, क्योंकि नए तत्व को सम्मिलित करते समय आदेश की गारंटी नहीं है।
- यदि आपके संग्रह को क्रमबद्ध किया जाना है, तो यह लंबे समय तक जीवित रहता है और / या यदि यह एक वर्ग के भीतर का क्षेत्र है और आपको इसे हर समय क्रमबद्ध करने की आवश्यकता है, तो आपको ट्रीसेट जैसे सॉर्ट किए गए डेटा संरचना का उपयोग करना चाहिए।
औचित्य: आप हर समय संग्रह के आदेश की परवाह करते हैं। आप चाहते हैं कि इसे हर हाल में सुलझाया जाए। इसलिए यदि आप लगातार उन तत्वों को जोड़ते या हटाते हैं जिनकी गारंटी है कि संग्रह को क्रमबद्ध किया गया है। तो मूल रूप से:
सम्मिलित करें / निकालें -> इसका उपयोग करें (आपके पास हर समय यह गारंटी है कि संग्रह क्रमबद्ध है)
कोई विशिष्ट क्षण नहीं है जहां आपको संग्रह को सॉर्ट करने की आवश्यकता है, इसके बजाय, आप चाहते हैं कि संग्रह को हर समय सॉर्ट किया जाए।
ट्रीसेट का उपयोग करने का नकारात्मक पहलू यह है कि इसे सॉर्ट किए गए संग्रह को रखने की आवश्यकता है। यह एक लाल-काले पेड़ का उपयोग करता है, और इसे प्राप्त करने के लिए ओ (लॉग एन) समय की आवश्यकता होती है, संचालन करते हैं।
जबकि अगर आप एक साधारण संग्रह का उपयोग करते हैं, जैसे कि ArrayList, get, add संचालन तो O (1) निरंतर समय है।