2013-07-14 15 views
24

जाहिर है, यह दस्तावेज नहीं है या मैंने इसे याद किया है।जावा के संग्रह। सॉर्ट (सूची, तुलनित्र) का क्रम क्रम क्या है? छोटे से बड़े या छोटे से छोटे?

संपादित (17/5):

Here के प्रलेखन के लिए लिंक और नीचे एक छवि के रूप में पाठ है मुझे लगता है कि बहुत सारे इस सवाल उलझन में एक तुलनित्र सवाल किया जाना है। यह नहीं। तुलनित्र 2 तत्वों के बीच तुलना करता है। उस तुलना के अनुसार, सूची क्रमबद्ध। कैसे? चढ़ना या उतरना?

मैं शुद्ध/आगे भी प्रश्न को सरल बना रहे: तुलनित्र फैसला करता है कि तत्व एक तत्व बी की तुलना में छोटे क्रमबद्ध सूची में है, तो तत्व एक तत्व बी तुलना में एक छोटे सूचकांक पर स्थित होगा?

enter image description here

+2

यह आप कैसे लिखा है 'पर निर्भर करता है Comparator'? – sanbhat

+0

क्या आपने 'तुलनाकर्ता' के एपीआई में देखा है? यह आपको अपने स्वयं के सॉर्ट ऑर्डर को परिभाषित करने की अनुमति देता है। –

+0

कृपया 15/7 से मेरा संपादन देखें। –

उत्तर

22

को बड़ा है।

प्रलेखन से Collections.sort(List<T> list, Comparator<? super T> c) के लिए:

निर्दिष्ट तुलनित्र द्वारा प्रेरित क्रम के अनुसार निर्दिष्ट सूची क्रमित।

प्रलेखन से Comparator.compare(T,T) के लिए:

आदेश के लिए अपने दो तर्क की तुलना। एक नकारात्मक पूर्णांक, शून्य, या एक सकारात्मक पूर्णांक देता है क्योंकि पहला तर्क दूसरे से कम, बराबर या उससे अधिक है।

+2

आपको क्यों लगता है कि क्रमबद्ध सूची आरोही है? –

+3

निरीक्षण। विधि को कॉल करने के बाद, तुलनित्र द्वारा प्रदान की गई परिभाषा के अनुसार, सूची को सबसे छोटे से सबसे बड़े सदस्यों तक व्यवस्थित किया जाता है। अवलोकन से पहले, मैंने भाई विधि Collections.sort (सूची ) के साथ समांतरता के लिए आरोही क्रम का अनुमान लगाया होगा, जो * स्पष्ट रूप से आरोही क्रम होने के लिए प्रलेखित है। जिस विधि का आप उपयोग कर रहे हैं उसके लिए प्रलेखन को अपने भाई की तरह आरोही क्रम का स्पष्ट रूप से उल्लेख करके सुधार किया जाएगा। –

19

आप (या बल्कि, अपने तुलनित्र) का फैसला किया।

  • अपने Comparator की एक नकारात्मक वापसी compare(T o1, T o2) हैं जब o1 कम से कम o2 है, आप (demo on ideone) आरोही मिलता है।
  • यदि आपके Comparator के compare(T o1, T o2)o1 से अधिक होने पर ऋणात्मक लौटाते हैं, तो आपको अवरोही क्रम (demo on ideone) मिलता है।

कह ही बात होगी sort मानता है कि कि तुलनित्र अधिक से अधिक (o2) के लिए छोटे (o1) से यह में पारित दो आइटम आदेश देता है, और एक आरोही तरह है कि आदेश के अनुरूप उत्पादन करता है का एक और तरीका।

+4

तुलना करने के लिए एक और तरीका, तुलनात्मक अनुबंध के साथ अधिक संगत, यह है कि तुलनाकर्ता परिभाषित करता है कि कौन से आइटम कम से कम, बराबर, या दूसरों से अधिक हैं। –

+0

क्या दूसरी वाक्य को सकारात्मक नहीं होना चाहिए जब ओ 1 ओ 2 से कम हो? अन्यथा यह पहली वाक्य में वैसे ही सॉर्ट करेगा। – nif

+0

@ एनआईएफ आप सही हैं, मुझे शर्त के एक हिस्से को "उलटा" होना चाहिए, दोनों नहीं। धन्यवाद! – dasblinkenlight

2

Comparator.compareTo(o1, o2) विधि के प्रलेखन का कहना है

आदेश के लिए अपने दो तर्क तुलना करता है। एक नकारात्मक पूर्णांक देता है, शून्य, या पहले पूर्ण तर्क के रूप में एक सकारात्मक पूर्णांक, के बराबर या दूसरे से अधिक है।

तो अगर आप प्राकृतिक आदेश से क्रमबद्ध करना चाहते हैं, कि बड़े को छोटा है, तो आप कार्यान्वयन के रूप में दस्तावेज में परिभाषित लिखना चाहिए

public int compareTo(Integer o1, Integer o2) { 
    int v1 = (o1); 
    int v2 = (o2); 
    if(v1 == v2) { 
     return 0; 
    } 
    if(v1 < v2) { 
     return -1; //return negative integer if first argument is less than second 
    } 
    return 1; 
} 

आप उलटे क्रम में होने की छँटाई चाहते हैं , कि सॉर्ट क्रम हमेशा आरोही, जहां तुलनाकारी को परिभाषित करता है जो आइटम दूसरों की तुलना में बड़े होते हैं छोटे

public int compareTo(Integer o1, Integer o2) { 
    int v1 = (o1); 
    int v2 = (o2); 
    if(v1 == v2) { 
     return 0; 
    } 
    if(v1 < v2) { 
     return 1; //do the other way 
    } 
    return -1; 
} 
0

प्रलेखन https://docs.oracle.com/javase/7/docs/api/java/util/Collections.html#sort(java.util.List,%20java.util.Comparator के अनुसार, Collections.sort के लिए तरह कार्यान्वयन (सूची, तुलनित्र) mergeSort है।

मर्जोर्ट द्वारा उत्पादित परिणाम को देखते हुए आरोही (https://en.wikipedia.org/wiki/Merge_sort) है, संग्रह .sort (सूची, तुलनित्र) के क्रम क्रम आरोही है।

यदि तुलनित्र फैसला करता है कि तत्व एक तत्व बी की तुलना में छोटे क्रमबद्ध सूची, तत्व एक तत्व बी तुलना में एक छोटे सूचकांक पर स्थित होगा में है कहने के लिए है कि

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