HashMap和INT的关键(HashMap and int as key)

2019-08-31 19:11发布

我想建立一个HashMap这将有整数键和对象值。

我的语法是:

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

然而,返回的错误是 - 令牌“INT”语法错误,尺寸预计此令牌后 - 我不明白为什么我要补充一个维度(即:使INT到一个数组),因为我只需要存储一个数字作为重点。

我能做什么?

提前致谢! :)

Answer 1:

你不能在内部使用原始的,因为HashMap的使用对象为重点。 所以,你只能使用从Object继承的对象(即任何对象)。

这是函数的put()在HashMap和你可以看到它使用对象K:

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”应明确。

我建议使用像整数和自动装箱的包装。



Answer 2:

使用Integer代替。

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

Java将自动autobox你int的原始值到Integer对象。

了解更多关于自动装箱从Oracle的Java单证。



Answer 3:

对于大家谁的Java代码Android设备,并在这里结束了:使用SparseArray获得更好的性能

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

这样,你可以使用整数的int,而不是像

int newPos = 3;

myMap.put(newPos, newObject);
myMap.get(newPos);


Answer 4:

您可以尝试使用特罗韦http://trove.starlight-systems.com/
TIntObjectHashMap可能是你在找什么。



Answer 5:

HashMap中不允许基本数据类型作为参数。 它只能接受这样的对象

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

不管用。

你必须申报变更为

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

所以,即使你做到以下

myMap.put(2,myObject);

原始数据类型autoboxed到整数对象。

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

你可以阅读更多的自动装箱这里http://docs.oracle.com/javase/tutorial/java/data/autoboxing.html



Answer 6:

如果您在Android的代码,有SparseArray ,映射整数对象。



Answer 7:

HashMap中不允许原始作为键主要原因是HashMap中被设计成这样一种方式,用于比较的钥匙,它使得使用equals()方法,和一种方法只能在一个对象不是在原始调用。

因此,当int值autoboxed为整数,哈希映射可以调用等号整数对象上()方法。

这就是为什么你应该使用INT的整数。 我的意思是HashMap中抛出一个错误,而把廉政作为重点(不知道在引发错误的意思)

如果你认为,你可以使地图的性能更快通过使原始的一个关键,有一个叫FastUtil库,包含整型作为密钥的Map实现。

正因为如此,它比哈希映射快得多



Answer 8:

使用int作为对象不是作为原始类型

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


Answer 9:

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



Answer 10:

我不明白为什么我要补充一个维度(即:使INT到一个数组),因为我只需要存储一个数字的关键。

阵列也是一个对象,所以HashMap<int[], MyObject>是使用INT数组作为密钥的有效构造。

编译器不知道你想要什么,或者你需要什么,它只是看到一个语言结构几乎是正确的,并警告有什么遗漏它是完全正确的。



文章来源: HashMap and int as key
标签: java hashmap