두 개의 키로지도를 직접 만들 수는 없지만 둘을 결합 할 수는 있습니다.
가장 간단한 방법은 문자열을 직렬화하여 결합하는 것입니다. 개체를 추정
String key = obj1.toString() + "-" + obj2.toString();
myMap.put(key, myValue);
쉽게 고유 것이다 문자열로 직렬화 할 수 있습니다.
그렇지 않은 경우 래퍼 객체를 만드는 것이 가장 좋습니다. equals() 및 hashCode() 메서드를 재정의하는 객체를 정의해야합니다. 거친 예를
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);
@Hieko : Inventive.이 개념에 익숙하지 않은 헬퍼 클래스를 설명하는 소스를 알고 계십니까? –
도우미 클래스는 특별한 개념이 아닙니다. 두 개의 하위 개체를 하나로 묶어 취급하는 일반적인 클래스입니다. 보다 자세한 코드 예제는 아래 예제를 참조하십시오. –
@Hieko 중요한 문제는 equals와 hashcode를 올바르게 구현하는 방법에 있습니다. –