2014-06-27 13 views
6

में एक ही कुंजी के साथ कई मानों को संग्रहीत करना मेरे पास आज एक साक्षात्कार था और मेरे साक्षात्कारकर्ता ने मुझसे पूछा कि मैं हैश मैप में एक ही कुंजी वाले एकाधिक मान कैसे स्टोर कर सकता हूं? उसने मुझे यह उदाहरण दिया -> अगर मुझे स्ट्रिंग की एक सूची दी गई है और मुझे लगता है कि स्ट्रिंग की लंबाई कुंजी के रूप में और स्ट्रिंग को मूल्य के रूप में स्टोर करना है।हैश मैप

Map<Integer, ArrayList<String>> map = new HashMap<Integer, ArrayList<String>>(); 

पूर्णांक स्ट्रिंग की लंबाई जा रहा है और ArrayList कि विशेष रूप से लंबाई के तार स्टोर करेगा:

मैं उसे कैसे मैं HashMap का उपयोग किया जाएगा में निम्नलिखित समाधान दे दी है।

साक्षात्कारकर्ता ने कहा कि यह हैश मैप का उपयोग करने का एक तरीका है, लेकिन एक और तरीका है जिसमें मुझे ऐरेलिस्ट या किसी अन्य डेटा संरचना की आवश्यकता नहीं होगी। साक्षात्कार के दौरान, मैं किसी भी समाधान के साथ नहीं आ सकता था और अब पर्याप्त googling के बाद, मेरे पास अभी भी कुछ भी नहीं है। क्या कोई मुझे बता सकता है कि मैं इस प्रश्न के समाधान को कैसे प्राप्त कर सकता हूं?

धन्यवाद!

+0

परिभाषा के अनुसार 'हैश मैप' में प्रति मूल्य एक मूल्य है ... साक्षात्कारकर्ता क्या प्राप्त कर रहा था, यह सुनिश्चित नहीं है। – awksp

+0

@ user3580294: मैंने यही कहा है .. लेकिन उसने मुझे बताया कि इसके लिए एक बहुत ही बुनियादी अवधारणात्मक उत्तर है .. –

+0

आपको किस चीज का उपयोग करने की अनुमति है? क्या वह अवधारणा के हैशपैप डेटास्ट्रक्चर के बारे में बात कर रही है? – CMPS

उत्तर

8

एक तरह से पाया जा सकता है मूल्यों में सभी स्ट्रिंग्स श्रृंखलाबद्ध है।

उदा।

map.put(2,"rr*tt*yy"); 
map.put(3,"nnn*ggg*sss"); 
map.put(4,"ffff*dddd*jjjj"); 
+5

नहीं है, यह एक दिलचस्प विचार है। वास्तविक दुनिया में बिल्कुल बेकार, लेकिन निश्चित रूप से एक संभावना ... – awksp

+0

अच्छी तरह से अच्छा ... मुझे लगता है कि उसके प्रश्न का संभावित उत्तर है ... उत्तर साथी के लिए धन्यवाद :) –

+2

+1 दिलचस्प। यही साक्षात्कारकर्ता के लिए जा रहा है। हालांकि मैं कहूंगा कि अभी भी डेटा संरचना के रूप में गिना जाता है, केवल अनियंत्रित है और भाषा की अपनी सुविधाओं का उपयोग नहीं करता है: यह अनिवार्य रूप से एक डेलीमीटर या ज्ञात तत्व लंबाई का उपयोग करके एक ऐरेलिस्ट सूची शैली को कार्यान्वित कर रहा है।(आपको सबस्ट्रिंग्स के बीच "*" की आवश्यकता नहीं है क्योंकि उनकी लंबाई कुंजी से जानी जाती है। और डिलीमीटर का उपयोग करते समय आपको एक एस्केपिंग तकनीक का उपयोग करना होगा।) –

0

साक्षात्कारकर्ता यह जांचने के लिए देख रहा था कि क्या आप तृतीय पक्ष एपीआई जानते हैं या नहीं। ऐसा करने के लिए कई एपीआई उपलब्ध हैं। उनमें से कुछ किसी भी डेटा संरचना का उपयोग किए बिना पर http://java.dzone.com/articles/hashmap-%E2%80%93-single-key-and

+0

साक्षात्कारकर्ता का कहना है कि किसी भी अन्य डेटा संरचना की आवश्यकता नहीं है, जिसका कोई तीसरा पक्ष एपीआई – maress

0

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

बस सुनिश्चित करें कि आप एक उलटा एन्क्रिप्शन एल्गोरिदम का उपयोग करें।

एक और विकल्प यूयूआईडी उत्पन्न करना होगा और स्ट्रिंग के आकार को उसमें जोड़ना होगा।

UUID uuid = UUID.randomUUID() 
String key = stringSize + "," + uuid; 

यह एक अद्वितीय मूल्य भी होगा जिसके बाद आप String.split() का उपयोग करके पुनर्प्राप्त कर सकते हैं;