2017-01-30 5 views
1

나는 유형의 복합 키를 만들려고하고 이름 반환 문자열을 모두자바 - 하나 개의 값이 키를 유지 (트리 맵)

public String getObjectName() { 
    return objectName; 
} 
public String getObjectType() { 
    return objectType; 
} 

및 트리 맵 모두 개체 이름과 objectType의 요구를 보관하고 싶습니다 단일 키 및 두 번째 String 즉 값은 사용자가 지정해야합니다. 유형 문자열 값

어떤 점이 좋습니까? 나는 TreeMap의

public static void setDomainDocumentationMap(Map<String, String> domainDocumentationMap) { 
    MMTUtil.domainDocumentationMap = domainDocumentationMap; 
+0

'objectName'과'objecttype'에서 키를 구성하려면 값을 함께 연결하고'objectName' 또는'objectType'에서 발생하지 않을 구분 기호로 구분할 수 있습니다. 예를 들어'objectName'이 "obName"이고 "objecttype"이 "obType"이면 키는 "obName-obType"일 수 있습니다. –

답변

3

한 가지 방법은 다른 답변에 표시된 연결하는 것입니다. 그런 다음 키로 사용할 수 있으며 값으로 사용자 입력이 무엇이든지 넣을 수 있습니다. 그러면 Map<String, String> 유형이됩니다.

class Key{ 
    private String objectName; 
    private String objectType; 

    //TODO write setters here 

    public String getObjectName(){ 
     return objectName; 
    } 

    public String getObjectType(){ 
     return objectType; 
    } 

    public String toString(){ 
     return objectName + ":separator:" + objectType; 
    } 

    //TODO implement hashcode and equals method 
} 

이제지도가 있어야한다 :

또 다른 방법은 키에 대한 클래스를 만드는 것입니다 Map<Key, String> 나는이보다 유연해야한다 생각합니다.

+1

또한 objectName 및 objectType의 해시 코드를 만드는 Key 클래스에 대해 hashCode() 메서드를 제공해야합니다. – Ridcully

+0

오른쪽. 그것을 구현 자에게 맡겼다. 'equals()'와'hashcode()'는 꼭 필요하다. – xploreraj

0

당신은 "@@-#-#[email protected]@" 또는 당신은 당신의 데이터가되지 않습니다 확신 다른 문자열과 같은 문자열을 사용하여 두 개의 예비 키를 연결할 수 있습니다 거 가게 해요 곳

이것은이다 이 연결 문자열을지도의 '키'로 사용하십시오. 미래에지도의 '키'에서 두 개의 키 문자열을 가져와야하는 경우 "@@-#-#[email protected]@" 문자열을 사용하여지도의 키를 분할하면됩니다.

0

TreeMap은 궁극적으로지도로만 사용되므로 키와 값 즉 구조가 동일합니다. 다른 점은, 트리 맵은 요소가 오름차순의 키 순서로 소트 될 것을 보증합니다. 두 문자열을 합성 키로 사용하려면이 두 문자열 사이에 구분 기호를 추가 한 다음 키로 추가 할 수 있습니다. 예를 들어 #을 구분 기호로 사용하면 문자열 1 # 문자열 2이 키로 저장되며 값이 저장됩니다.

코드 예 :

public class Test{ 

    private static final String SEPERATOR ="$$" ; 

    private String getCompositekey(String key1, String key2) 
    { 
    return key1+SEPERATOR+key2; 
    } 

    public static void main(String[] args){ 
    Map<String,Object> t = new TreeMap<String,Object>(); 
    Test test = new Test(); 
    t.put(test.getCompositekey(test.getObjectName(),test.getObjectType()),VALUEGOESHERE); 
    } 
} 
+0

저장하는 경우 private static final String SEPERATOR = "$$"; 전용 문자열 getCompositekey (String key1, String key2) { return key1 + SEPERATOR + key2; } 다른 패키지에 있고 다른 클래스에서 getCompositKey를 사용하고 싶습니다. 어떻게해야합니까? –

+0

이 예제는 사용법을 보여주기위한 것입니다. 필요에 따라 수식어를 사용할 수 있습니다. 동일한 패키지에있는 경우 모든 패키지 액세스를 위해 비공개로 유지하여 공용으로 유지하십시오. –