2

だから私は HashMap クラスのすべてのプロパティを持つ UniqueHashMap と呼ばれる 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、ハッシュ、マップ)を解決しません。

拡張子を間違っていますか?または、いくつかのインポートがありませんか?

4

4 に答える 4

3

学術的な作業ではなく、一意のキーと値を持つコレクションが必要な場合は、BiMap を使用してください。

Google Guava ( BiMap ) と Apache Commons ( BidiMap )で見つけることができます。

于 2013-03-15T18:00:12.683 に答える
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);
 }
于 2013-03-15T18:01:04.410 に答える
0

の一般的な形式を使用する場合はHashMap、次のように継承を行う必要があります。

public class UniqueHashMap<K, V> extends HashMap<K, V> {
    ....
}
于 2013-03-15T18:01:07.723 に答える
0

キーが最初のマップ値である反対方向にHashMapを作成します。これがApacheCommonsのBiMapが行うことだと思います。

于 2013-03-15T18:01:23.897 に答える