हां, क्योंकि यह नहीं है कि आप बाहरी कोड से कोई सीमा कैसे निकालते हैं। इसके बजाय, यह करें:
list.subList(start, end).clear();
यह वास्तव removeRange
में पर्दे के पीछे कहता है । †
ओपी पूछता है कि सार्वजनिक एपीआई removeRange
का हिस्सा क्यों नहीं List
है। कारण प्रभावी जावा 2 एड के आइटम 40 में वर्णित है, और मैं इसे यहां उद्धृत करता हूं:
अत्यधिक लंबी पैरामीटर सूचियों को छोटा करने के लिए तीन तकनीकें हैं। एक विधि को कई विधियों में विभाजित करना है, जिनमें से प्रत्येक को केवल मापदंडों के एक सबसेट की आवश्यकता होती है। यदि लापरवाही से काम लिया जाए, तो इससे बहुत अधिक विधियां हो सकती हैं, लेकिन यह रूढ़िवादिता को बढ़ाकर विधि की गिनती को कम करने में भी मदद कर सकता है । उदाहरण के लिए, java.util.List
इंटरफ़ेस पर विचार करें। यह एक तत्व के पहले या अंतिम सूचकांक को खोजने के लिए विधियाँ प्रदान नहीं करता है, जिसमें दोनों को तीन मापदंडों की आवश्यकता होगी। इसके बजाय यह subList
विधि प्रदान करता है , जो दो पैरामीटर लेता है और एक सबलिस्ट का दृश्य देता है । इस पद्धति को indexOf
या तो lastIndexOf
तरीकों के साथ जोड़ा जा सकता है , जिनमें से प्रत्येक में वांछित कार्यक्षमता प्राप्त करने के लिए एक एकल पैरामीटर है। इसके अलावा,subList
विधि को किसी भी विधि के साथ जोड़ा जा सकता है जो List
उदाहरण के तौर पर उपनलियों पर मनमानी गणना करने के लिए संचालित होती है । परिणामस्वरूप एपीआई में बहुत अधिक शक्ति-से-भार अनुपात है।
कोई यह तर्क दे removeRange
सकता है कि कई पैरामीटर नहीं हैं और इसलिए शायद इस उपचार के लिए कोई उम्मीदवार नहीं है, लेकिन यह देखते हुए कि इसके removeRange
माध्यम से आह्वान करने का एक तरीका है subList
, List
एक निरर्थक पद्धति के साथ इंटरफ़ेस को अव्यवस्थित करने का कोई कारण नहीं है ।
†AbstractList.removeRange
प्रलेखन का कहना है:
इस विधि को clear
इस सूची और इसके उपलेस्ट पर ऑपरेशन द्वारा बुलाया जाता है । सूची कार्यान्वयन के आंतरिक लोगों का लाभ उठाने के लिए इस पद्धति को ओवरराइड करने से इस सूची और इसके उप-कलाकारों पर कार्रवाई के प्रदर्शन में काफी सुधार हो सकता हैclear
।
इसके अलावा, के OpenJDK के कार्यान्वयन को देखने AbstractList.clear
और SubList.removeRange
।