我正在使用 HashMap: byte[] 键和字符串值.但我意识到,即使我使用
I'm using a HashMap: byte[] key and String value. But I realize that even I put the same object (same byte array and same string value) by using
myList.put(TheSameByteArray, TheSameStringValue)
到HashMap中,表还是会插入一个新的具有不同HashMapEntry的对象.那么函数 containsKey() 就不能工作了.
into HashMap, the table still inserts a new object with different HashMapEntry. Then function containsKey() cannot work.
有人可以为我解释一下吗?我怎样才能解决这个问题?谢谢.(Android Java)
Can someone explains this for me? How can I fix this? Thanks. (Android 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;
}
一个 byte[](或任何数组)不能作为 HashMap,因为数组不会覆盖equals,所以两个数组只有在引用同一个对象时才会被认为是相等的.
A byte[] (or any array) can't work properly as a key in a HashMap, since arrays don't override equals, so two arrays will be considered equal only if they refer to the same object.
您必须将您的 byte[] 包装在一些覆盖 hashCode 和 equals 的自定义类中,并将该自定义类用作HashMap 的关键.
You'll have to wrap your byte[] in some custom class that overrides hashCode and equals, and use that custom class as the key to your HashMap.
这篇关于具有字节数组键和字符串值的 HashMap - containsKey() 函数不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
为什么在 Eclipse 的 SDK 中选择 Android API 而不是 Why would you choose Android API over Google APIs in the SDK on Eclipse?(为什么在 Eclipse 的 SDK 中选择 Android API 而不是 Google API?)
Couchbase 存储桶身份验证错误Couchbase Bucket authentication error(Couchbase 存储桶身份验证错误)
admob 6.2.1 空指针异常admob 6.2.1 nullpointer exception(admob 6.2.1 空指针异常)
如何在 IntelliJ IDEA 中设置 SDK?How to setup SDK in IntelliJ IDEA?(如何在 IntelliJ IDEA 中设置 SDK?)
eclipse 无法检测到我的手机进行试运行My phone cannot be detected in eclipse to test run(eclipse 无法检测到我的手机进行试运行)
android SDK 中缺少 platform-toolsaapt.exe 目录platform-toolsaapt.exe directory missing in android SDK(android SDK 中缺少 platform-toolsaapt.exe 目录)