2012-03-03 25 views
5

यह पेड़ के नक्शे के बारे में एक नोबई प्रश्न है। मैंने जावा एपीआई और अन्य दस्तावेज के माध्यम से पढ़ा है लेकिन यह अभी भी अस्पष्ट है कि यह कैसे काम करता है।ट्रीमैप्स को समझना

मेरी समझ से, जावा (या किसी भी भाषा) में एक पेड़ परिवार के पेड़ की तरह है; आप जहां कहना है:

Layer 1        OldestGuy  
Layer 2  OldGuy1  Oldguy2   OldGuy3  OldGuy4   OldGuy5 
Layer 3 Guy1 Guy2 Guy3 Guy4 Guy5 Guy6........ etc 

कहाँ लेयर 1 1 मूल्य (यानी एक केंद्रीय नोड) है और वहाँ से वहाँ हर अगली परत में मानों (या दोस्तों) की मनमानी मात्रा में हो सकता है, और "शाखाओं" के कुछ दूसरों से अधिक लंबा हो सकता है (उदाहरण के लिए यह सबसे पुराना गुया -> OldGuy1 -> Guy1 & Guy2 ... Guyn जबकि एक ही समय में एक और शाखा है OldestGuy -> OldGuy4)

इस इंडस दिमाग के साथ मैं कोशिश कर रहा हूं विशिष्ट कनेक्शन बनाने के दौरान विशिष्ट शाखाओं के विशिष्ट स्थानों में वृक्षारोपण में मान जोड़ें, लेकिन मुझे लगता है कि यह सब एक हैश मैप के समान परिणाम है।

(ऐसा लगता है कि मैं क्या करना चाहते हैं ट्री-मैप की तुलना में अधिक कुछ .... कुंजी (या लेयर (? के रूप में की आवश्यकता है) कई विभिन्न मूल्यों के लिए ही होगा)

कोई सुझाव/स्पष्टीकरण होगा शानदार क्योंकि मुझे लगता है कि मैं इस के साथ गलत पेड़ को गंभीरता से भड़क रहा हूं।

मैंने गूगल्स का उपयोग करके इसका उदाहरण देखा है .jar, (जैसे पारिवारिक पेड़) लेकिन मैं इसे समझने की कोशिश कर रहा हूं क्योंकि ट्रीमैप और पेड़ के बीच बहुत सारे संघर्ष होते हैं और आप उनमें डेटा कैसे स्टोर कर सकते हैं।

+2

+1 गलत पेड़ को भौंकने के लिए +1। –

उत्तर

7

TreeMap सिर्फ Map का एक कार्यान्वयन है जो दृश्यों के पीछे एक लाल-काले पेड़ का उपयोग होता है। पेड़ का ब्योरा आपके सामने नहीं आया है, इसलिए आप मनमानी स्थानों में तत्वों को स्टोर नहीं कर सकते हैं।

इसे एक और तरीका रखने के लिए, TreeMap एक सामान्य उद्देश्य पेड़ डेटा संरचना नहीं है। यदि आप वास्तव में यही चाहते हैं, तो शायद इस स्टैक ओवरफ़्लो प्रश्न पर एक नज़र डालें: Java tree data-structure?

+0

स्पष्टीकरण लोगों के लिए धन्यवाद, मुझे लगता है कि मुझे वृक्ष के हिस्से पर लटका दिया गया था और उम्मीद थी कि विशिष्ट नोड्स पर जाने का कोई तरीका था। JTree = D के बारे में जानने के लिए अपना समय लगता है –

0

एक जावा TreeMap ओ (लॉग एन) लुकअप और आवेषण प्राप्त करने के लिए एक आंतरिक डेटा संरचना के रूप में एक पेड़ का उपयोग करता है, लेकिन इसके पेड़ की संरचना को इसके इंटरफेस में बेनकाब नहीं करता है। इसलिए, उदाहरण के लिए, कोई पेड़ नोड और उसके सभी वंश प्राप्त करने का कोई तरीका नहीं है, या इसका उपयोग करके परिवार के पेड़ का प्रतिनिधित्व करें।

0

TreeMapMap (एक पेड़ के माध्यम से लागू) है, न कि एक पेड़ (Map या अन्यथा के माध्यम से लागू)।

0

मुझे लगता है कि आप दो अलग-अलग चीजों को भ्रमित कर रहे हैं। TreeMap को रेड-ब्लैक ट्री के रूप में कार्यान्वित किया गया है।
जावा डॉक के अनुसार:

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

यह कार्यान्वयन के लिए गारंटीकृत लॉग (एन) समय लागत प्रदान करता है, जिसमें शामिल हैं, प्राप्त करें, हटाएं और हटाएं। एल्गोरिदम कॉर्मन, लीज़रसन, और रिवेस्ट के परिचय में एल्गोरिदम के अनुकूलन हैं।

तो, संक्षेप में आप अपनी चाबियों का एक उम्मीद के मुताबिक आदेश के लिए आप या तो ट्री-मैप छोड़ प्राकृतिक आदेश का उपयोग करके अपने कुंजी आदेश या लागू Comparator खुद के इंटरफेस करने चाहिए चाहते हैं। फिर, जावाडोक से:

ध्यान दें कि आदेश, एक पेड़ नक्शा द्वारा बनाए रखा किसी भी क्रमबद्ध नक्शा, और चाहे या नहीं एक स्पष्ट तुलनित्र प्रदान की जाती है, बराबरी के अनुरूप होना चाहिए अगर यह क्रमबद्ध नक्शा है की तरह नक्शा इंटरफ़ेस सही ढंग से कार्यान्वित करने के लिए। (एक सटीक बराबर के साथ संगत की परिभाषा के लिए तुलनात्मक या तुलनात्मक देखें।) ऐसा इसलिए है क्योंकि मानचित्र इंटरफ़ेस बराबर ऑपरेशन के संदर्भ में परिभाषित किया गया है, लेकिन एक क्रमबद्ध मानचित्र इसकी तुलना का उपयोग करके सभी महत्वपूर्ण तुलना करता है (या तुलना करें) विधि, इसलिए इस विधि के बराबर समझा जाने वाला दो कुंजियां क्रमबद्ध मानचित्र के स्टैंडपॉइंट से बराबर हैं। सॉर्ट किए गए मानचित्र का व्यवहार अच्छी तरह से परिभाषित किया गया है भले ही उसका ऑर्डरिंग बराबर के साथ असंगत हो; यह सिर्फ मानचित्र इंटरफ़ेस के सामान्य अनुबंध का पालन करने में विफल रहता है।

अब, यह स्पष्ट नहीं है कि आप अपनी चाबियाँ (यानी प्राकृतिक आदेश) या किसी अन्य तरीके से (यानी सम्मिलन आदेश या कुछ और?) में रखना चाहते हैं।
उदाहरण के लिए, यदि आप सम्मिलन आदेश पसंद करते हैं तो LinkedHashMap आपके मामले के लिए बेहतर साबित हो सकता है।
यदि मामला कुछ और है तो कृपया इसे निर्दिष्ट करें:]।

2
public class TreeMap<K,V> 
extends AbstractMap<K,V> 
implements NavigableMap<K,V>, Cloneable, Serializable 
  • वृक्ष नक्शा कुंजी के भंडारण के लिए hashing उपयोग नहीं करता। इसका उपयोग रेड-ब्लैक पेड़ (स्व-संतुलन बाइनरी खोज पेड़।) का उपयोग करें।
  • ट्रीमैप को इसकी चाबियों के प्राकृतिक क्रम के अनुसार क्रमबद्ध किया जाता है। वृक्ष मानचित्र में हमेशा होगा सभी तत्व क्रमबद्ध।
  • वृक्ष मानचित्र का कार्य पेड़ डेटा संरचना पर आधारित है।
  • वृक्ष मानचित्र सिंक्रनाइज़ नहीं और इसलिए थ्रेड सुरक्षित नहीं है।
  • जावा में वृक्ष नक्शा शून्य कुंजी की अनुमति देता है, लेकिन एकाधिक शून्य मान की अनुमति देता है।

वृक्ष मानचित्र का कार्य पेड़ डेटा संरचना पर आधारित है।

  • प्रत्येक नोड में 3 संदर्भ हैं: माता-पिता, बाएं और दाएं।
  • LEFT तत्व हमेशा मूल तत्व से कम होते हैं।
  • सही तत्व हमेशा माता-पिता तत्व के grater या बराबर होते हैं।
संबंधित मुद्दे