116

キーとして整数、値としてオブジェクトを持つ HashMap を構築しようとしています。

私の構文は次のとおりです。

HashMap<int, myObject> myMap = new HashMap<int, myObject>();

ただし、返されるエラーは次のとおりです-トークン「int」の構文エラー、このトークンの後にディメンションが必要です-数字を格納する必要があるだけなので、ディメンションを追加する必要がある理由がわかりません(つまり、int を配列にする)キーとして。

どうすればよいですか?

前もって感謝します!:)

4

12 に答える 12

149

Integer代わりに使用してください。

HashMap<Integer, MyObject> myMap = new HashMap<Integer, MyObject>();

Java は、intプリミティブ値をIntegerオブジェクトに自動的に自動ボックス化します。

Oracle Java ドキュメンテーションからオートボクシングの詳細を参照してください。

于 2013-04-22T13:41:11.600 に答える
45

Android デバイス用に Java をコーディングし、ここにたどり着くすべての人にとって:SparseArrayパフォーマンスを向上させるために使用します。

private final SparseArray<myObject> myMap = new SparseArray<myObject>();

これにより、Integer like; の代わりに int を使用できます。

int newPos = 3;

myMap.put(newPos, newObject);
myMap.get(newPos);
于 2013-12-08T15:06:01.847 に答える
28

HashMap はキーの内部でオブジェクトを使用するため、プリミティブを使用することはできません。したがって、オブジェクトから継承するオブジェクト (つまり、任意のオブジェクト) のみを使用できます。

これは HashMap の put() 関数であり、ご覧のとおり、K に Object を使用しています。

public V put(K key, V value) {
    if (key == null)
        return putForNullKey(value);
    int hash = hash(key);
    int i = indexFor(hash, table.length);
    for (Entry<K,V> e = table[i]; e != null; e = e.next) {
        Object k;
        if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
            V oldValue = e.value;
            e.value = value;
            e.recordAccess(this);
            return oldValue;
        }
    }

    modCount++;
    addEntry(hash, key, value, i);
    return null;
}

「k = e.key」という表現はそれを明確にするはずです。

Integer や autoboxing などのラッパーを使用することをお勧めします。

于 2013-04-22T14:02:46.830 に答える
4

HashMap では、プリミティブ データ型を引数として使用できません。オブジェクトのみを受け入れることができるので、

HashMap<int, myObject> myMap = new HashMap<int, myObject>();

動作しないでしょう。

宣言を次のように変更する必要があります

HashMap<Integer, myObject> myMap = new HashMap<Integer, myObject>();

そのため、次のことを行う場合でも

myMap.put(2,myObject);

プリミティブ データ型は、Integer オブジェクトに自動ボックス化されます。

8 (int) === boxing ===> 8 (Integer)

ここでオートボクシングの詳細を読むことができますhttp://docs.oracle.com/javase/tutorial/java/data/autoboxing.html

于 2013-04-22T14:04:37.200 に答える
0

使ってください HashMap<Integer, myObject> myMap = new HashMap<Integer, myObject>();

于 2013-04-22T13:42:39.370 に答える