2011-02-06 4 views
7

LinkedList में element() विधि और getFirst() विधि (अजीब तरह से - एक ही शब्द नहीं) के लिए समान विवरण हैं।लिंक्डलिस्ट वर्ग में तत्व() और getFirst() विधियों के बीच क्या अंतर है?

Deque स्पष्ट रूप से बताता है कि दो विधियां वापसी मूल्य और अपवाद के संदर्भ में समान हैं।

मेरा सवाल है - 2 समान तरीकों क्यों हैं? क्या यह पिछड़ा संगतता के लिए है? क्या एक दृष्टिकोण दूसरे की तुलना में अधिक कुशल है?

उत्तर

5

element()Queue से विरासत में मिली है, जहां यह बाद से सभी आप एक कतार में क्या कर सकते हैं पहला तत्व को दूर है समझ में आता है केवल एक तक पहुँचने विधि के लिए किया जाता है। हालांकि, एक डेक से दोनों का समर्थन करता है, ऐसा करने के लिए स्पष्ट तरीकों की आवश्यकता होती है।

और एपीआई डिज़ाइन करना बहुत अच्छा नहीं है जहां आप element() के साथ पहले तत्व तक पहुंचेंगे और अंतिम getLast() के साथ अंतिम होगा।

एक और बात यह है कि इस में निभा सकता है कि Deque 1.6, जहां जावा संग्रह फ्रेमवर्क के प्राचीन भाग के कुछ हिस्सों ऐसी संपत्ति के उपयोग के लिए स्पष्ट get~/set~ तरीके के रूप में नए सम्मेलनों, द्वारा समाप्त कर दिया गया है में जोड़ा गया है। उस संदर्भ में, getFirst() और getLast वर्तमान जावा सम्मेलनों का अधिक बारीकी से पालन करते हैं।

+0

वास्तव में प्राप्त/सेट सम्मेलन वास्तव में नया नहीं है, यह वास्तव में संग्रह ढांचे से पुराना है (उदाहरण के लिए पुराने वेक्टर वर्ग की तुलना में पुराने वेक्टर वर्ग की तुलना करें)। –

+0

मैं ईमानदारी से सोचता हूं कि उस मामले में, तत्व() विधि चरणबद्ध होनी चाहिए थी। मान लीजिए कि बहुत से लोगों द्वारा इसकी सराहना नहीं की जा रही है, क्या कम से कम इसे कम नहीं किया जा सकता है? या कम से कम, जैवडॉक्स में कुछ प्रकार के दिशानिर्देश के रूप में, दोनों में से कौन सी विधि चुनने के लिए। (मुझे काफी यकीन है कि यह जावा में डुप्लिकेट विधियों का एकमात्र उदाहरण नहीं है)। – user183037

+0

@ पालो: मुझे लगता है कि वे वास्तव में संग्रह के साथ वास्तव में परवाह नहीं करते हैं। जबकि उन्होंने 99% स्विंग की तरह बहिष्कृत किया और इसे अधिक बोझिल बना दिया, सहकर्मियों ने 'आकार() ': जैसे विधियों को बनाए रखा। – Joey

0

सूचीबद्ध एक लिंक में ऐसा लगता है कि वे वही हैं। लेकिन एक कतार में, element() कतार में पहले तत्व पर चोटी का एक तरीका प्रतीत होता है, लेकिन इसे कतार से नहीं हटाता है।

3

जावा 1.6, LinkedList लागू Deque (डबल-एंड कतार) लागू करता है। Deque.element() javadocs से:

प्राप्त करता है, लेकिन दूर नहीं करता, कतार इस Deque द्वारा प्रतिनिधित्व की सिर (दूसरे शब्दों में, इस Deque के पहले तत्व)। यह विधि केवल में अपवाद फेंकती है यदि यह डेक खाली है तो यह अपवाद फेंकता है।

यह विधि getFirst() के बराबर है।

जावा 1.5, LinkedList में दोनों विधियां हैं, लेकिन getFirst() किसी इंटरफ़ेस द्वारा समर्थित नहीं है। मेरा अनुमान है कि जावा 1.6 में उन्होंने जानबूझकर इस विधि को शामिल करने के लिए लागू किया।

जावा 1.4, LinkedList में केवल getFirst() है, लेकिन यह एक इंटरफ़ेस द्वारा समर्थित नहीं है।

जाहिर है मैं कहता हूँ कि हम इस पश्च संगतता बनाए रखने का एक मुद्दा है:

  • LinkedList 1,4 getFirst है() और केवल List इंटरफ़ेस
  • LinkedList 1।5 औजार Queue और इसलिए बराबर elements() विधि
  • LinkedList 1.6 औजार Deque का समर्थन करने की जरूरत है, लेकिन क्योंकि एक) यह पीछे की ओर संगत और ख) नीति के द्वारा रहने के लिए है, सभी तरीकों इंटरफेस का समर्थन प्राप्त किया जाना चाहिए, Deque इंटरफ़ेस भी डुप्लिकेट शामिल विधि
+0

"लिंक्डलिस्ट 1.5 कतार लागू करता है और इसलिए समकक्ष तत्व() विधि का समर्थन करने की आवश्यकता है" - एक पंक्ति में पहला तत्व पुनर्प्राप्त करने के लिए (जो तत्व है() करता है), क्या यह केवल फर्स्ट() का उपयोग करने के लिए सही अर्थ नहीं है - 1.4 से स्थापित किया गया कुछ? (मैं बस इसे स्पष्ट करने की कोशिश कर रहा हूं, मैं विवाद करने की कोशिश नहीं कर रहा हूं)। – user183037

+0

1.4 में उपयोगकर्ता 183037, लिंक्डलिस्ट को 'getFirst() 'और क्यूई के पास तत्व()' था लेकिन लिंक्डलिस्ट अभी तक कतार लागू नहीं करता है। बाद में, जब ऐसा होता है, पिछली संगतता के लिए दोनों विधियां आवश्यक होती हैं (हालांकि उनका अनुबंध बराबर है) –

+0

मैं इसे वापस लेता हूं, मुझे अभी एहसास हुआ कि क्यूई केवल 1.5 में पेश किया गया था। नहीं, मैं परेशान हूँ। मुझे लगता है कि वे कतार इंटरफ़ेस में तत्व() नाम नहीं चाहते थे। –

संबंधित मुद्दे