2013-03-15 1 views
2

그래서 HashMap 클래스의 모든 속성을 가진 UniqueHashMap이라는 확장 클래스를 만들려고합니다. 반복되는 키를 사용하려면 값을 반복 할 수 없습니다. 값이 반복되면, 키는 대체됩니다, 예를 들면 :java.util.HashMap 클래스의 확장 인 클래스 만들기

Apple ->Green

그리고 나는 우리가 필요가 없습니다 put("Pear", "Green")

시도 : Pear ->Green

import java.util.HashMap; 
import java.util.Iterator; 
import java.util.Map; 
import java.util.Set; 


public class UniqueHashMap extends HashMap { 

    public UniqueHashMap() { 
    } 

    public UniqueHashMap(int arg0) { 
     super(arg0); 
    } 

    public UniqueHashMap(Map arg0) { 
     super(arg0); 
    } 

    public UniqueHashMap(int arg0, float arg1) { 
     super(arg0, arg1); 
    } 

    public V put(K k, V v){ 
     Set entrySet = (Set) hash.entrySet(); //Store entry of HashMap in a set 

     Iterator entryIterator = entrySet.iterator(); //Create iterator for the set 

     if(hash.containsValue(v)) 
     {   
      while(entryIterator.hasNext()) 
      { 
       Map.Entry mapEntry = (Map.Entry) entryIterator.next(); 

       String key = (String) mapEntry.getKey(); 
       String value = (String) mapEntry.getValue(); 

       System.out.println("Key is = " + key + " and Value is = " + value); 
       System.out.println(); 

       if (value.equals(v)) 
       { 
        hash.remove(key); 
        hash.put(v, value); 
        break; 
       } 
      } 

      System.out.println(hash); 
     } 
    } 

보시다시피 나는 수퍼 클래스의 모든 생성자를 가지고 있지만 HashMap 클래스 (K, V, 해시, 맵)에서 내재해야하는 값을 해결하지는 않습니다.

연장을 잘못하고 있습니까? 또는 나는 몇몇 수입품을 놓치고 있는가?

+0

정규 HashMap을 사용하여 값을 키로 사용하거나 그 반대로 사용하지 않는 이유는 무엇입니까? – adamdunson

답변

3

학술적 과제가 아니며 유일한 키와 값을 가진 컬렉션이 필요한 경우 - BiMap을 사용하십시오.

Google 구아바 (BiMap) 및 Apache Commons (BidiMap)에서 찾을 수 있습니다.

+0

BiMap을 사용할 수 없으므로 UniqueHashMap 클래스 확장을 만들어야합니다. 나는 반복 된 값을 가질 수 있지만 열쇠는 가져 오지 않는다. –

1

독자적인 관계를 역으로 수행하기 때문에 UniqueHashMap은 부모 클래스에 위임해야합니다.

public V put(K k, V v) { 
    // reverse the order you put, and what you're keying off of. 
    super.put(v, k); 
} 
0

당신이 HashMap의 일반적인 양식을 사용하려는 경우, 당신은 상속이 방법을 수행해야합니다 그 키가 첫번째 맵 값이 어디에

public class UniqueHashMap<K, V> extends HashMap<K, V> { 
    .... 
} 
+0

자, 이제 K와 V가 해결되었다. 그러나 해시 (기본 Set 생성자)는 그렇지 않습니다. 확장 프로그램에서 무엇을 변경할 수 있습니까? –

+0

하지만 변수'hash'는 어디에 선언합니까? – niculare

+0

나는 HashMap 클래스에서 그것을 내버려두기를 바랬는데, 분명히 선언 할 방법이 확실하지 않지만 아마도 Set이어야한다고 생각한다. –

0

다른 방향으로의 HashMap를 작성합니다. 이것이 Apache Commons의 BiMap이하는 일이라고 생각합니다.