簡體   English   中英

創建一個作為java.util.HashMap類擴展的類

[英]Creating a class that is an extension of the java.util.HashMap class

因此,我試圖創建一個名為UniqueHashMap的HashMap類的擴展,該擴展具有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)中插入的值。

我的擴展名做錯了嗎? 還是我缺少一些進口商品?

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

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

由於要反向執行唯一關系,因此UniqueHashMap應該類似地委派給其父類。

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

如果要使用HashMap的通用形式,則應通過以下方式進行繼承:

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

在另一個方向上創建一個HashMap,該鍵的鍵是第一個地圖值。 我認為這就是Apache Commons的BiMap所做的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM