2012-12-30 26 views
6

संभव डुप्लिकेट:
How can I sort the keys of a Map in Java?वृक्ष मानचित्र में 'प्राकृतिक क्रम' क्या है?

वर्ग TreeMap में जावा एपीआई का कहना है:

एक लाल-काले पेड़ आधारित NavigableMap कार्यान्वयन। नक्शा को अपनी चाबियों के प्राकृतिक क्रम के अनुसार क्रमबद्ध किया जाता है, या नक्शा निर्माण समय पर प्रदान किए गए एक तुलनाकर्ता द्वारा, किस कन्स्ट्रक्टर का उपयोग किया जाता है, इस पर निर्भर करता है।

प्राकृतिक आदेश से क्या मतलब है? कुंजी के रूप में उपयोग की जाने वाली कक्षा को Comparable इंटरफ़ेस को लागू करने की आवश्यकता नहीं है, लेकिन इसके बजाय किस क्रम का उपयोग किया जाएगा?

+6

मेरे प्रश्न का बिंदु 'प्राकृतिक क्रम' शब्द को समझना है, न कि सामान्य रूप से मानचित्र की चाबियों को कैसे क्रमबद्ध करना है। –

उत्तर

5

आप स्वयं वह कोशिश करने के लिए आप पाते हैं कि आप एक TreeMap उपयोग नहीं कर सकते है कि एक K कि Comparable को लागू नहीं करता है (जब तक आप स्पष्ट रूप से TreeMap निर्माता के माध्यम से एक Comparator प्रदान) थे, तो।

public class App 
{ 
    public static void main(String[] args) 
    { 
     TreeMap<App,String> tm = new TreeMap<App,String>(); 
     tm.put(new App(), "value"); 
    } 
} 

सूत्र में अपवाद "मुख्य" java.lang.ClassCastException:

: put() राज्यों यह स्पष्ट रूप से के लिए जावाडोक अनुप्रयोग java.lang.Comparable

में ढाला नहीं जा सकता

फेंकता है:
क्लासकास्ट अपवाद - यदि निर्दिष्ट कुंजी की तुलना नहीं की जा सकती है नक्शा

"प्राकृतिक आदेश के लिए" javadocs for TreeMap में लिंक Comparable इंटरफ़ेस

0

प्राकृतिक क्रम कुंजी द्वारा निर्धारित किया जाता है।

तो यदि आप स्ट्रिंग का उपयोग करते हैं तो आपको एक ऑर्डर मिल जाएगा; इंटीजर एक और दे देंगे।

मुझे लगता है कि तुलनात्मक आवश्यकता है।

+0

धन्यवाद। मैं एक स्व-निर्मित वर्ग के साथ एक TreeMap ऑब्जेक्ट बना सकता हूं जो तुलनात्मक इंटरफ़ेस को लागू नहीं करता है। कम से कम, मुझे कोई त्रुटि नहीं मिलती है। एपीआई कुंजी जेनेरिक प्रकार के लिए कोई प्रतिबंध नहीं बनाता है। –

+0

तो आपको क्या ऑर्डर मिलता है? ऐसे प्रश्नों का उत्तर देने का यह सबसे अच्छा तरीका है: जेवीएम आपको बताए। – duffymo

+0

हां और नहीं। मैं सही जवाब जानना चाहता हूं, परीक्षण-उत्पन्न उत्तर नहीं जो संभवतः मुझे झूठी छाप दे सकता है :-) –

4

"प्राकृतिक" ऑर्डरिंग TreeMap में कुंजियों के रूप में उपयोग की जाने वाली वस्तुओं द्वारा Comparable इंटरफ़ेस के कार्यान्वयन द्वारा निहित आदेश है।

  • लागू वर्ग (ते) में Comparable इंटरफेस के लिए कुंजी के रूप में इस्तेमाल: मूलतः, RBTree बताने के लिए जो कुंजी अन्य प्रमुख से छोटी है, और वहाँ RBTree कार्यान्वयन के लिए कि तर्क की आपूर्ति करने के दो तरीके हैं सक्षम होना चाहिए TreeMap, या
  • Comparator के कार्यान्वयन की आपूर्ति जो कुंजी वर्ग के बाहर तुलना करना चाहती है।
1

प्राकृतिक आदेश पर ले जाता है में कुंजी वर्तमान में सिर्फ Comparable इंटरफ़ेस द्वारा प्रदान आदेश है।आप TreeMap को Comparator के बिना बना सकते हैं, लेकिन तब किसी भी कुंजी को डालने का कोई भी प्रयास जो प्राकृतिक ऑर्डर लागू नहीं करता है, ClassCastException फेंक देगा।

2

यह Comparable लागू करने की आवश्यकता है। यह संकलन समय पर लागू नहीं है।

jamlong% cat Wah.java 

import java.util.*; 

public class Wah { 

    public static void main(String[] args) { 
     TreeMap<Wah, Integer> wah = new TreeMap<Wah, Integer>(); 
     wah.put(new Wah(), 1); 
     wah.put(new Wah(), 2); 
    } 
} 

jamlong% java Wah 

Exception in thread "main" java.lang.ClassCastException: Wah cannot be cast to java.lang.Comparable 
    at java.util.TreeMap.put(TreeMap.java:542) 
    at Wah.main(Wah.java:8) 

संदेह में, read the TreeMap source। उदाहरण के लिए लाइन 541।

+0

* "यह तुलनात्मक लागू करने की आवश्यकता है।" * - यह एक कठिन आवश्यकता नहीं है। यदि आप 'ट्राएपमैप' को 'तुलनाकर्ता' के साथ तत्काल करते हैं, तो कुंजी को 'तुलनात्मक' लागू करने की आवश्यकता नहीं होती है। –

+0

@StephenC - मैं निश्चित रूप से अपने शब्द में अधिक स्पष्ट हो सकता था, लेकिन सवाल मूल रूप से "प्राकृतिक आदेश" के संदर्भ में पूछ रहा था, जो केवल तभी लागू होगा जब आप पहले में एक तुलनाकर्ता के साथ ट्रीएप का उपयोग नहीं कर रहे हों जगह (या, मुझे लगता है, अगर आप स्पष्ट रूप से एक तुलनात्मक के साथ तत्काल प्रारंभ करते हैं जिसने प्राकृतिक आदेश दिया - लेकिन यह सवाल बल्कि गैरकानूनी होगा), इस मामले में, मेरा जवाब खड़ा है - यह लागू नहीं करता है कि वर्ग तुलनात्मक है, लेकिन यह रनटाइम पर ClassCastException होगा यदि यह नहीं है। – James

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

  • कोई संबंधित समस्या नहीं^_^