Map <Pattern,Object>无法找到密钥

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课程没有实现equalshashCode基于模式.但即使它没有,也不Object使用内存地址hashCode,equals所以只要我传递相同的Object实例,就应该找到密钥?

编辑:对不起伙计.这是我实际拥有的.忘记transform每次访问完成后都会创建一个新实例.

List<Pattern> patterns = Lists.transform(Lists.newArrayList("blah1", "blah2"), toPattern);
Run Code Online (Sandbox Code Playgroud)

Pet*_*rey 6

鉴于您的代码无法编译,我只能假设这不是您正在运行的代码.

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)