创建一个类,它是java.util.HashMap类的扩展

时间:2013-03-15 17:58:01

标签: java superclass

所以我试图创建一个名为UniqueHashMap的HashMap类的扩展,它具有HashMap类的所有属性,但是不能重复使用值,而不能重复值。如果重复值,则替换Key,例如:

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)中得到的值

我做错了吗?或者我错过了一些进口产品?

4 个答案:

答案 0 :(得分:3)

如果这不是一项学术任务,而您只需要一个具有唯一键和值的集合 - 请使用BiMap。

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

答案 1 :(得分: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);
 }

答案 2 :(得分:0)

如果你想使用HashMap的通用形式,你应该这样做继承:

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

答案 3 :(得分:0)

在另一个方向创建一个HashMap,其中键是第一个map值。我认为这是Apache Commons的BiMap所做的。