我正在使用 HashMap:byte[] 键和字符串值。但我意识到即使我使用相同的对象(相同的字节数组和相同的字符串值)
myList.put(TheSameByteArray, TheSameStringValue)
到 HashMap 中,表仍然插入具有不同 HashMapEntry 的新对象。那么函数 containsKey() 就无法工作。
有人能为我解释一下吗?我怎样才能解决这个问题?谢谢。 (安卓Java)
@Override public boolean containsKey(Object key) {
if (key == null) {
return entryForNullKey != null;
}
int hash = Collections.secondaryHash(key);
HashMapEntry<K, V>[] tab = table;
for (HashMapEntry<K, V> e = tab[hash & (tab.length - 1)];
e != null; e = e.next) {
K eKey = e.key;
if (eKey == key || (e.hash == hash && key.equals(eKey))) {
return true;
}
}
return false;
}
A byte[]
(或任何数组)无法作为键正常工作HashMap
,因为数组不会覆盖equals
,因此只有当两个数组引用同一个对象时,它们才会被视为相等。
你必须把你的byte[]
在一些覆盖的自定义类中hashCode
and equals
,并使用该自定义类作为 HashMap 的键。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)