HashMap の迷子ちゃん
なんとなく,Key が可変だったらどうなるんだろうなぁとか
思ったのでやってみた♪
import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; public class Main { public static void main(String[] argv) { Map<Hoge,String> map = new HashMap<Hoge, String>(); map.put(new Hoge("test1"), "value1"); System.out.println(map.size()); System.out.println(map.get(new Hoge("test1"))); Hoge hoge = new Hoge("test2"); map.put(hoge, "value2"); System.out.println(map.size()); System.out.println(map.get(new Hoge("test2"))); hoge.setKey("test"); System.out.println(map.size()); System.out.println(map.get(new Hoge("test1"))); System.out.println(map.remove(new Hoge("test1"))); System.out.println(map.size()); for(Hoge hoge2 : map.keySet()) { System.out.println(map.containsKey(hoge2)); } } static class Hoge { private String key; public Hoge(String key) { this.key = key; } /** * @param key the key to set */ public void setKey(String key) { this.key = key; } /** * @return the key */ public String getKey() { return key; } @Override public boolean equals(Object obj) { if(obj == null || !(obj instanceof Hoge)) { return false; } Hoge hoge = (Hoge)obj; if(this.key == null) { return hoge.key == null; } return this.key.equals(hoge.getKey()); } @Override public int hashCode() { return key.hashCode(); } } }
結果
1 value1 2 value2 2 value1 value1 1 false
keySet を回してるのに containsKey が false という
本当の迷子ちゃんが出来ました.おしまい