2013-03-15 60 views
2

所以我試圖創建一個名爲UniqueHashMap的HashMap類的擴展,它具有HashMap類的所有屬性,但不是不能要重複鍵,值不能重複。如果值是重複的,關鍵被替換,如:創建一個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,Hash,Map)

我在做擴展錯誤嗎?還是我缺少一些進口?

+0

爲什麼不直接使用你的值作爲你的密鑰,反之亦然,使用常規的HashMap? – adamdunson 2013-03-15 18:22:12

回答

3

如果這不是一項學術任務,而且您只需要一個具有唯一鍵和值的集合 - 請使用BiMap。

你可以在Google Guava(BiMap)和Apache Commons(BidiMap)中找到它。

+0

我無法使用BiMap,必須創建UniqueHashMap類擴展。我被允許有重複的值,但沒有鍵 – 2013-03-15 18:01:54

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構造函數)沒有。任何想法我可以在擴展中改變? – 2013-03-15 18:10:05

+0

但你在哪裏聲明變量'hash'? – niculare 2013-03-15 18:14:52

+0

我沒有,我希望它只是從HashMap類(它顯然沒有),但我不知道如何聲明它,我覺得它可能應該是一個集。 – 2013-03-15 18:18:57

0

創建另一個方向是一個HashMap其中的關鍵是第一個映射值。我認爲這是Apache Commons的BiMap所做的。