2011-04-14 15 views
7

मैं एक से अधिक 37K मदों की एक सूची है, और मैं पहले से ही hashCode(), equals() लागू किया है, तो मुझे आश्चर्य है कि Collections.binarySearch() प्रदर्शन और तेजी से indexOf() विधि में सुधार कर सकते हैं।Collections.binarySearch() बनाम सूची indexOf()

उत्तर

15

यदि आपका संग्रह सॉर्ट किया गया है, तो binarySearch()indexOf() के ओ (एन) के विपरीत ओ (लॉग एन) होगा और आप निश्चित रूप से एक सुधार देखेंगे।

+0

यह केवल तभी सच है जब संग्रह निरंतर समय-जटिलता यादृच्छिक पहुंच की अनुमति देता है, उदाहरण के लिए ArrayList। यह एक लिंक्डलिस्ट के लिए सच नहीं है। – davmac

8

binarySearch के क्रम में() काम करने के लिए, अपनी सूची अनुसार क्रमबद्ध किया जाना चाहिए। बराबर() और हैशकोड() को सॉर्टिंग के साथ कुछ लेना देना नहीं है। आपकी वस्तुओं को तुलनात्मक होने की आवश्यकता है, या आपके पास एक प्रासंगिक तुलनात्मक होना चाहिए। किसी भी तरह, आप चाहिए प्रकार सूची पहले।

और हाँ, सूची संभालने क्रमबद्ध हो जाता है, तो आप शायद (binarySearch से बेहतर प्रदर्शन प्राप्त होगा) indexOf की तुलना में()।

+0

वास्तव में, मेरे आइटम भी तुलनीय है। –

3

आप एक HashSet का उपयोग करके भी बेहतर प्रदर्शन प्राप्त होगा। हालांकि, यह और अधिक जगह ले जाएगा।

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