2012-01-16 9 views
6

मुझे एक मानचित्र की आवश्यकता है, लेकिन जब मैं कॉल करता हूं (कुंजी, एन) इसे न केवल खोजे गए कुंजी मान के साथ सभी रिकॉर्ड वापस करना चाहिए, बल्कि यह भी जहां कुंजी की अंतिम महत्वपूर्ण बिट्स खोज कुंजी के समान हैं (उदाहरण के लिए कुंजी & (1 < < (एन + 1) -1) जैसे कुछ लागू करना)।क्या जावा दुनिया में एक चर कुंजी की लंबाई के साथ एक नक्शा है?

क्या ऐसा कुछ जावा में पहले से लागू किया गया है?

+0

क्यों न केवल वास्तविक कुंजी को गणना की गई कुंजी के कम से कम महत्वपूर्ण बिट्स बनाते हैं? –

+0

@ ग्रेग्स: मेरा मानना ​​है कि ओपी चाहता है कि प्रति फ्लाई पर 'एन' दिया जाए। – amit

+0

जाहिर है कि इस तरह के विशिष्ट मानक पुस्तकालय में उपलब्ध नहीं है। सवाल यह है: क्या आप केवल मुख्य महत्वपूर्ण बिट्स का उपयोग कुंजी के रूप में नहीं कर सकते हैं और मूल्य के रूप में एक सूची के रूप में? एक कुंजी निर्दिष्ट क्यों करें जिसका आप वास्तव में उपयोग नहीं कर सकते? – Viruzzo

उत्तर

10

काफी नहीं है, लेकिन आप इसे लागू करने के लिए NavigableMap.subMap का उपयोग कर सकते हैं। जैसे

NavigableMap<Integer, Value> map = 
int keyBase = key & ~((1 << n)-1); 
Map<Integer, Value> subMap = map.subMap(keyBase, true, keyBase + (1 << n), false); 

यदि आप चाहते हैं उच्चतम बिट्स के बजाय सबसे कम बिट्स के आधार पर खोज करने के लिए, आप को जोड़ने और खोज करने से पहले बिट्स को उल्टा करने के लिए है। यह सबसे कम बिट, दूसरा सबसे कम बिट तीसरा सबसे कम बिट इत्यादि समूह करेगा।

+1

मुझे लगता है कि आपको कुंजी के बिट्स को उलट करने की आवश्यकता है, क्योंकि ओपी कम से कम महत्वपूर्ण रखना चाहता है, न कि सबसे महत्वपूर्ण बिट्स। – dasblinkenlight

+0

हां, @dasblinkenlight। ऐसा लगता है कि उपर्युक्त कोड 'n' * दाएं * बिट्स के बजाए एक ही' (64 - (एन -1)) '* बाएं * बिट्स के साथ चाबियाँ स्वीकार करता है। – toto2

+0

पहले सबसे कम बिट द्वारा क्रमबद्ध करने के तरीके पर एक टिप्पणी जोड़ें। –

2

हैश मैप ऐसा करने वाला नहीं है, लेकिन एक वृक्ष मैप कर सकता है।

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

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