2016-02-25 20 views
5

जावा में, TreeMap<K,V> प्रविष्टियों स्टोर करने के लिए एक आरबी पेड़ का उपयोग करता है, की अनुमति के लिए इन-आदेश map.entrySet().iterator() का उपयोग कर, जबकि लॉग (एन) समय में प्रविष्टि और देखने की गारंटी यात्रा।जावा: ट्रीमैप प्रविष्टि से इटरेटर?

ट्रीमैप किसी दिए गए कुंजी के लिए ऊपरी और निचली सीमाओं को खोजने के तरीकों को भी प्रदान करता है: map.floorEntry(k), map.ceilingEntry(), map.lowerEntry(k) और map.higherEntry()। हालांकि, उनमें से वापसी मूल्य Map.Entry<K,V> उदाहरण है और सीधे किसी को पड़ोसी प्रविष्टियों पर जाने की अनुमति नहीं देगा। मैं अपनी कुंजी के साथ एक काल्पनिक प्रविष्टि के पड़ोसियों की यात्रा करना चाहता था।

वहाँ एक रास्ता एक ट्री-मैप प्रविष्टि से एक इटरेटर मिलता है या मैं क्या करने की कोशिश कर रहा हूँ करने के लिए है?

सी ++ के std::map<K,V> वर्ग, मैं एक नुकसान यहाँ पर हूँ ...

नोट मैं जब तक यह है के रूप में java.util के अलावा किसी अन्य कंटेनर लाइब्रेरी का उपयोग कर एक समाधान के लिए खुला रहा हूँ के लिए और अधिक आदी होने के नाते कुछ उचित समय जटिलता गारंटी के साथ एक क्रमबद्ध मानचित्र कंटेनर।

उत्तर

2

आप Map.Entry<K, V> को tailMap(K fromKey) या headMap(K toKey) में पैरामीटर के रूप में लौटाए जाने की कुंजी ले सकते हैं, और परिणाम को फिर से शुरू कर सकते हैं।

+0

है कि मैं के लिए लगभग क्या देख रहा हूँ; हालांकि, यह देखते हुए कि मैं दोनों प्रविष्टियों को तुरंत किसी कुंजी के बाद से पहले और तुरंत हैं प्राप्त करना चाहते हैं, मैं दोनों तरीकों कॉल करने के लिए, दो लुकअप, जो CPU चक्र की बर्बादी की तरह लगता है, जिसका अर्थ है होगा। – Shadocko

+0

ठीक है, खेद मैं आपका जवाब गलत समझा, तो आप स्पष्ट रूप से मतलब 'map.tailMap (map.lowerEntry (के) .getKey())'। यह काम करेगा लेकिन अभी भी 2 लुकअप की आवश्यकता है। – Shadocko

+0

एक अन्य समाधान - अपनी आवश्यकताओं के लिए ट्री-मैप की अपनी इटरेटर बनाया है, लेकिन यह एक आसान काम नहीं है – Eva

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