आप दो कुंजी के साथ सीधे नक्शा नहीं बना सकते हैं, हालांकि आप दोनों को जोड़ सकते हैं।
सबसे आसान तरीका है उन्हें एक स्ट्रिंग में क्रमबद्ध करना और उन्हें गठबंधन करना।
String key = obj1.toString() + "-" + obj2.toString();
myMap.put(key, myValue);
वस्तुओं मानते हुए आसानी से एक स्ट्रिंग है अद्वितीय होगा धारावाहिक जा सकता है।
यदि ऐसा नहीं है, तो एक रैपर ऑब्जेक्ट बनाना आपका सबसे अच्छा विकल्प है। आपको उस ऑब्जेक्ट को परिभाषित करने की आवश्यकता होगी जो बराबर() और हैशकोड() विधि को ओवरराइड करता है।
एक मोटा उदाहरण
class CombinedKey{
private MyClass object1;
private MyClass object2;
public CombinedKey(MyClass object1, MyClass object2){
this.object1 = object1;
this.object2 = object2;
}
public int hashCode(){
return object1.hashCode() + object2.hashCode();
}
@Override
public Boolean equals(Object otherObject){
if(otherObject == null || otherObject.getObject1() == null) return false;
return object1.equals(otherObject.getObject1()) && object2.equals(otherObject.getObject2();
}
public MyClass getObject1() { return object1; }
public MyClass getObject2() { return object2; }
}
(तुम भी तो यह अन्य परिदृश्यों में पुन: उपयोग किया जा सकता है इस वर्ग को परिभाषित करने के जेनेरिक्स उपयोग करने पर विचार करना चाह सकते हैं) के रूप में
उपयोग:
Map<CombinedKey, Object> myMap = new HashMap<CombinedKey, Object>();
myMap.put(new CombinedKey(obj1, obj2), value);
स्रोत
2011-02-14 06:34:28
@Hieko: खोजक का उपयोग करके बनाना आसान है।क्या आप ऐसे स्रोत के बारे में जानते हैं जो सहायक वर्गों को बताता है क्योंकि मैं अवधारणा से परिचित नहीं हूं। –
एक सहायक वर्ग इस तरह की एक विशेष अवधारणा नहीं है, यह केवल एक सामान्य वर्ग है जो आपके दो उपनिवेशों को लपेटती है और उन्हें एक के रूप में मानती है। अधिक विस्तृत कोड उदाहरण के लिए नीचे मेरा उदाहरण देखें। –
@ हेको मुख्य समस्या यह है कि आप बराबर और हैशकोड को सही तरीके से कैसे कार्यान्वित करते हैं। –