Joh*_*n B 1 java hashmap hashcode
我有以下代码:
List<Pattern> patterns = Lists.newArrayList(Pattern.compile("blah"), Pattern.compile("blah2"));
Map<Pattern, String> map = new HashMap<Patter, String>();
map.put(patterns.get(0), "1");
map.put(patterns.get(1), "2");
Assert.assertTrue(map.containsKey(patterns.get(0)));
Run Code Online (Sandbox Code Playgroud)
断言失败了!
为什么会这样?首先,我很惊讶该Pattern课程没有实现equals并hashCode基于模式.但即使它没有,也不Object使用内存地址hashCode,equals所以只要我传递相同的Object实例,就应该找到密钥?
编辑:对不起伙计.这是我实际拥有的.忘记transform每次访问完成后都会创建一个新实例.
List<Pattern> patterns = Lists.transform(Lists.newArrayList("blah1", "blah2"), toPattern);
Run Code Online (Sandbox Code Playgroud)
鉴于您的代码无法编译,我只能假设这不是您正在运行的代码.
List<Pattern> patterns = Arrays.asList(Pattern.compile("blah"), Pattern.compile("blah2"));
Map<Pattern, String> map = new HashMap<Pattern, String>();
map.put(patterns.get(0), "1");
map.put(patterns.get(1), "2");
System.out.println(map.containsKey(patterns.get(0)));
Run Code Online (Sandbox Code Playgroud)
版画
true
Run Code Online (Sandbox Code Playgroud)