创建作为java.util.HashMap类扩展的类

创建作为java.util.HashMap类扩展的类,java,superclass,Java,Superclass,因此,我试图创建一个名为UniqueHashMap的HashMap类的扩展,它具有HashMap类的所有属性,但是不能有重复的键,值不能重复。如果重复某个值,则会替换该键,例如: Apple->Green import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class UniqueHashMap extends HashMap {

因此,我试图创建一个名为UniqueHashMap的HashMap类的扩展,它具有HashMap类的所有属性,但是不能有重复的键,值不能重复。如果重复某个值,则会替换该键,例如:

Apple
->
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);
        }
    }
我试着把(“梨”,“绿”)

我们不会有:
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()和Apache Commons()中找到它。

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


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

因为您正在反向执行您的唯一关系,所以您的
UniqueHashMap
应该类似地委托给它的父类

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

由于您正在反向执行唯一关系,因此您的
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> {
    ....
}
public类UniqueHashMap扩展了HashMap{
....
}

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

public class UniqueHashMap<K, V> extends HashMap<K, V> {
    ....
}
public类UniqueHashMap扩展了HashMap{
....
}

在另一个方向创建一个HashMap,其中其键是第一个映射值。我假设Apache Commons的BiMap就是这样做的。

在另一个方向创建一个HashMap,其中它的键是第一个映射值。我假设这就是Apache Commons的BiMap所做的。

我不能使用BiMap,必须创建UniqueHashMap类扩展。我可以有重复的值,但不能有键。我不能使用BiMap,必须创建UniqueHashMap类扩展。我可以有重复的值,但不能有KeysOk,现在我有了这个,K和V已经解决了。但是hash(主集合构造函数)没有。你知道我可以在扩展中更改什么吗?但是你在哪里声明变量
hash
?我没有,我希望它只是从HashMap类中继承它(它显然没有),但是我不确定如何声明它,我觉得它可能应该是一个集合而不是
hash.entrySet()如果答案解决了您的问题,请将其标记为已批准。现在我有了这个,K和V已经解决了。但是hash(主集合构造函数)没有。你知道我可以在扩展中更改什么吗?但是你在哪里声明变量
hash
?我没有,我希望它只是从HashMap类中继承它(它显然没有),但是我不确定如何声明它,我觉得它可能应该是一个集合
而不是
hash.entrySet()如果答案解决了您的问题,请将其标记为已批准。一个向上投票也会很受欢迎为什么不把你的值作为键使用,反之亦然?为什么不把你的值作为键使用,反之亦然?