ハッシュマップルックアップが失敗するのはなぜですか? 私はクローンを作成していますこのコードには、2番目のソースから鍵を受け取るコピーをシミュレートするためのキーを入力します。 keyとkey2は同じバイト配列です。ハッシュマップルックアップで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'という名前のパーツには、従来のスペルを使用するのがよいエンジニアリングです。これは、下流のメンテナンス中にバグが発生する可能性を低減します。 –