मैं चकित हूं कि मुझे इसका त्वरित जवाब नहीं मिल रहा है। मैं अनिवार्य रूप से जावा में एक डेटास्ट्रक्चर की तलाश कर रहा हूं जो java.util.List
इंटरफ़ेस को लागू करता है, लेकिन जो अपने सदस्यों को क्रमबद्ध क्रम में संग्रहीत करता है। मुझे पता है कि आप एक सामान्य ArrayList
का उपयोग कर सकते हैं और Collections.sort()
उस पर उपयोग कर सकते हैं , लेकिन मेरे पास एक ऐसा परिदृश्य है जहां मैं कभी-कभार अपनी सूची से सदस्यों को जोड़ रहा हूं और अक्सर इसे प्राप्त करना चाहता हूं और हर बार जब मैं मामले में एक सदस्य को पुनः प्राप्त करता हूं तो मुझे इसे सॉर्ट करना नहीं पड़ता है नया जोड़ा गया है। क्या कोई मुझे ऐसी चीज की ओर इंगित कर सकता है जो जेडीके या यहां तक कि 3 पार्टी पुस्तकालयों में मौजूद है?
संपादित करें : डेटास्ट्रक्चर को डुप्लिकेट को संरक्षित करने की आवश्यकता होगी।
ANSWER का सारांश : मुझे यह सब बहुत दिलचस्प लगा और बहुत कुछ सीखा। Aioobe विशेष रूप से मेरी आवश्यकताओं को प्राप्त करने की कोशिश में उनकी दृढ़ता के लिए उल्लेख योग्य है (मुख्य रूप से एक सॉर्ट किए गए java.util। कार्यान्वयन जो डुप्लिकेट का समर्थन करता है)। मैंने उनके उत्तर को सबसे सटीक माना है, जो मैंने पूछा था और जो मैंने चाहा था उसके निहितार्थ पर भड़काने वाला सबसे अच्छा विचार था, भले ही मैंने पूछा कि वास्तव में मुझे क्या चाहिए था।
मैंने सूची इंटरफेस में खुद से झूठ और एक इंटरफेस में वैकल्पिक तरीकों की अवधारणा के साथ जो समस्या पूछी। जावदोक को उद्धृत करने के लिए:
इस इंटरफ़ेस के उपयोगकर्ता का सटीक नियंत्रण है कि सूची में प्रत्येक तत्व कहां डाला गया है।
एक सॉर्ट की गई सूची में सम्मिलित करने से प्रविष्टि बिंदु पर सटीक नियंत्रण नहीं होता है। फिर, आपको यह सोचना होगा कि आप कुछ तरीकों को कैसे संभालेंगे। add
उदाहरण के लिए लें :
सार्वजनिक बूलियन ऐड (ऑब्जेक्ट ओ)
Appends the specified element to the end of this list (optional operation).
अब आप या तो 1 की असहज स्थिति में रह गए हैं) अनुबंध को तोड़ना और ऐड 2 के सॉर्ट किए गए संस्करण को लागू करना) add
सूची के अंत में एक तत्व जोड़ने की अनुमति देना, आपके सॉर्ट किए गए ऑर्डर को तोड़ना 3) add
बाहर फेंकना (इसके वैकल्पिक रूप में) फेंककर UnsupportedOperationException
ए और एक अन्य विधि को लागू करना जो क्रमबद्ध क्रम में आइटम जोड़ता है।
विकल्प 3 शायद सबसे अच्छा है, लेकिन मुझे लगता है कि यह एक ऐड-वे विधि है जिसका आप उपयोग नहीं कर सकते हैं और एक अन्य सॉर्ट किया गया तरीका है जो इंटरफ़ेस में नहीं है।
अन्य संबंधित समाधान (कोई विशेष क्रम में नहीं):
- java.util.PyerityQueue जो मैंने जो मांगा था उसकी तुलना में शायद मैं सबसे ज्यादा करीब हूं। एक कतार मेरे मामले में वस्तुओं के संग्रह की सबसे सटीक परिभाषा नहीं है, लेकिन कार्यात्मक रूप से यह वह सब कुछ करता है जिसकी मुझे आवश्यकता है।
- net.sourceforge.nite.util.SortedList । हालाँकि, यह कार्यान्वयन
add(Object obj)
विधि में सॉर्टिंग को लागू करके सूची इंटरफ़ेस के अनुबंध को तोड़ता है और विचित्र रूप से इसके लिए कोई प्रभाव विधि नहीं हैadd(int index, Object obj)
। आम सहमति बताती हैthrow new UnsupportedOperationException()
कि इस परिदृश्य में एक बेहतर विकल्प हो सकता है। - अमरूद का ट्रीमल्टीसेट एक सेट कार्यान्वयन जो डुप्लिकेट का समर्थन करता है
- ca.odell.glazedlists.SortedList यह वर्ग अपने javadoc में चेतावनी के साथ आता है:
Warning: This class breaks the contract required by List