/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
class HashKey {
private int keyPartOne;
private int KeyPartTwo;
public HashKey(int keyPartOne, int keyPartTwo) {
this.keyPartOne = keyPartOne;
KeyPartTwo = keyPartTwo;
}
public int getKeyPartOne() {
return keyPartOne;
}
public void setKeyPartOne(int keyPartOne) {
this.keyPartOne = keyPartOne;
}
public int getKeyPartTwo() {
return KeyPartTwo;
}
public void setKeyPartTwo(int keyPartTwo) {
KeyPartTwo = keyPartTwo;
}
@Override
public boolean equals
(Object o
) { if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
HashKey hashKey = (HashKey) o;
if (keyPartOne != hashKey.keyPartOne) return false;
return KeyPartTwo == hashKey.KeyPartTwo;
}
@Override
public int hashCode() {
int result = keyPartOne;
result = 31 * result + KeyPartTwo;
return result;
}
}
class Ideone
{
{
HashMap<HashKey, String> firstMap = new HashMap<>();
HashKey firstHashKey = new HashKey(1, 1);
firstMap.put(firstHashKey, "text 1");
HashKey secondHashKey = new HashKey(1, 2);
firstMap.put(secondHashKey, "text 2");
System.
out.
println(firstMap.
get(firstHashKey
)); secondHashKey.setKeyPartTwo(1);
System.
out.
println(firstMap.
get(secondHashKey
));
System.
out.
printf("Map size: %d%n", firstMap.
size()); System.
out.
printf("First entry value: %s%n", firstMap.
get(new HashKey
(1,
1))); System.
out.
printf("Second entry value: %s%n", firstMap.
get(new HashKey
(1,
2)));
for(Map.
Entry<HashKey, String
> entry
: firstMap.
entrySet()) { System.
out.
printf("Key: %s, value: %s%n", entry.
getKey(), entry.
getValue()); }
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgpjbGFzcyBIYXNoS2V5IHsKIAogICAgcHJpdmF0ZSBpbnQga2V5UGFydE9uZTsKICAgIHByaXZhdGUgaW50IEtleVBhcnRUd287CiAKICAgIHB1YmxpYyBIYXNoS2V5KGludCBrZXlQYXJ0T25lLCBpbnQga2V5UGFydFR3bykgewogICAgICAgIHRoaXMua2V5UGFydE9uZSA9IGtleVBhcnRPbmU7CiAgICAgICAgS2V5UGFydFR3byA9IGtleVBhcnRUd287CiAgICB9CiAKICAgIHB1YmxpYyBpbnQgZ2V0S2V5UGFydE9uZSgpIHsKICAgICAgICByZXR1cm4ga2V5UGFydE9uZTsKICAgIH0KIAogICAgcHVibGljIHZvaWQgc2V0S2V5UGFydE9uZShpbnQga2V5UGFydE9uZSkgewogICAgICAgIHRoaXMua2V5UGFydE9uZSA9IGtleVBhcnRPbmU7CiAgICB9CiAKICAgIHB1YmxpYyBpbnQgZ2V0S2V5UGFydFR3bygpIHsKICAgICAgICByZXR1cm4gS2V5UGFydFR3bzsKICAgIH0KIAogICAgcHVibGljIHZvaWQgc2V0S2V5UGFydFR3byhpbnQga2V5UGFydFR3bykgewogICAgICAgIEtleVBhcnRUd28gPSBrZXlQYXJ0VHdvOwogICAgfQogCiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyBib29sZWFuIGVxdWFscyhPYmplY3QgbykgewogICAgICAgIGlmICh0aGlzID09IG8pIHJldHVybiB0cnVlOwogICAgICAgIGlmIChvID09IG51bGwgfHwgZ2V0Q2xhc3MoKSAhPSBvLmdldENsYXNzKCkpIHJldHVybiBmYWxzZTsKIAogICAgICAgIEhhc2hLZXkgaGFzaEtleSA9IChIYXNoS2V5KSBvOwogCiAgICAgICAgaWYgKGtleVBhcnRPbmUgIT0gaGFzaEtleS5rZXlQYXJ0T25lKSByZXR1cm4gZmFsc2U7CiAgICAgICAgcmV0dXJuIEtleVBhcnRUd28gPT0gaGFzaEtleS5LZXlQYXJ0VHdvOwogICAgfQogCiAgICBAT3ZlcnJpZGUKICAgIHB1YmxpYyBpbnQgaGFzaENvZGUoKSB7CiAgICAgICAgaW50IHJlc3VsdCA9IGtleVBhcnRPbmU7CiAgICAgICAgcmVzdWx0ID0gMzEgKiByZXN1bHQgKyBLZXlQYXJ0VHdvOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Cn0KCgpjbGFzcyBJZGVvbmUKewoJCglwdWJsaWMgc3RhdGljIHZvaWQgbWFpbiAoU3RyaW5nW10gYXJncykgdGhyb3dzIGphdmEubGFuZy5FeGNlcHRpb24KCXsKICAgICAgICBIYXNoTWFwPEhhc2hLZXksIFN0cmluZz4gZmlyc3RNYXAgPSBuZXcgSGFzaE1hcDw+KCk7CiAgICAgICAgSGFzaEtleSBmaXJzdEhhc2hLZXkgPSBuZXcgSGFzaEtleSgxLCAxKTsKICAgICAgICBmaXJzdE1hcC5wdXQoZmlyc3RIYXNoS2V5LCAidGV4dCAxIik7CiAgICAgICAgSGFzaEtleSBzZWNvbmRIYXNoS2V5ID0gbmV3IEhhc2hLZXkoMSwgMik7CiAgICAgICAgZmlyc3RNYXAucHV0KHNlY29uZEhhc2hLZXksICJ0ZXh0IDIiKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZmlyc3RNYXAuZ2V0KGZpcnN0SGFzaEtleSkpOwogICAgICAgIHNlY29uZEhhc2hLZXkuc2V0S2V5UGFydFR3bygxKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZmlyc3RNYXAuZ2V0KHNlY29uZEhhc2hLZXkpKTsKICAgICAgICAKICAgICAgICBTeXN0ZW0ub3V0LnByaW50ZigiTWFwIHNpemU6ICVkJW4iLCBmaXJzdE1hcC5zaXplKCkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRmKCJGaXJzdCBlbnRyeSB2YWx1ZTogJXMlbiIsIGZpcnN0TWFwLmdldChuZXcgSGFzaEtleSgxLCAxKSkpOwogICAgICAgIFN5c3RlbS5vdXQucHJpbnRmKCJTZWNvbmQgZW50cnkgdmFsdWU6ICVzJW4iLCBmaXJzdE1hcC5nZXQobmV3IEhhc2hLZXkoMSwgMikpKTsKICAgICAgICAKICAgICAgICBmb3IoTWFwLkVudHJ5PEhhc2hLZXksIFN0cmluZz4gZW50cnk6IGZpcnN0TWFwLmVudHJ5U2V0KCkpIHsKICAgICAgICAJU3lzdGVtLm91dC5wcmludGYoIktleTogJXMsIHZhbHVlOiAlcyVuIiwgZW50cnkuZ2V0S2V5KCksIGVudHJ5LmdldFZhbHVlKCkpOwogICAgICAgIH0KCX0KfQ==