爲什麼hashmap查找失敗? 我克隆鍵入此代碼來模擬從第二個來源接收副本的密鑰。 key和key2都是相同的字節數組。HashMap查找返回null
從註釋掉部分,可以確認的是,哈希表確實包含值。那麼爲什麼查找失敗?
public class NewClass {
public static void main(String[] args) {
HashMap<byte [], String> lookupTable = new HashMap<>();
byte[] key = new byte[32], key2;
SecureRandom sr = new SecureRandom();
sr.nextBytes(key);
String value = Arrays.toString(key);
lookupTable.put(key, value);
key2 = key.clone();
//System.out.println(Arrays.toString(key));
//System.out.println(Arrays.toString(key2));
System.out.println("Keys equal: "+ Arrays.equals(key2, key));
String retrivedValue;
/*
Set<byte[]> keySet = lookupTable.keySet();
for(byte[] k :keySet){
System.out.println("key in map : "+ Arrays.toString(k));
retrivedValue = keyLookupTable.get(k);
System.out.println("Test lookup sucessful:"+retrivedValue.equals(value));
}
*/
retrivedValue = lookupTable.get(key2);
try {
System.out.println("Test lookup sucessful:" + retrivedValue.equals(value));
} catch (NullPointerException e) {
System.out.println("retrivedValue is "+retrivedValue);
}
}
}
輸出:
Keys equal: true
retrivedValue is null
你要比較的hashCode直接equals方法,看看那些比賽。還挖掘到的克隆方法在這裏雜草:https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#clone() – mba12
爲你的程序工件,如當選擇的名字' retrivedValue',爲名稱部分使用傳統拼寫是一個很好的工程。它可以減少下游維護過程中出現錯誤的可能性。 –