diff --git a/CHANGELOG.md b/CHANGELOG.md index 65ceaf82a..7d9ccccad 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,7 @@ # 🚀Changelog ------------------------------------------------------------------------------------------------------------- -# 5.8.23(2023-10-08) +# 5.8.23(2023-10-18) ### 🐣新特性 * 【json 】 改进TemporalAccessorSerializer支持dayOfMonth和month枚举名(issue#I82AM8@Gitee) @@ -14,6 +14,7 @@ * 【cron 】 修复Cron表达式range解析错误问题(issue#I82CSH@Gitee) * 【core 】 修复VersionComparator在极端数据排序时候违反了自反性问题(issue#I81N3H@Gitee) * 【json 】 修复JSONStrFormatter:format函数对于转义符号处理逻辑错误问题(issue#I84V6I@Gitee) +* 【core 】 修复特定情况下BiMap覆盖Value后,仍能通过旧Value查询到Key问题(issue#I88R5M@Gitee) ------------------------------------------------------------------------------------------------------------- # 5.8.22(2023-09-13) diff --git a/hutool-core/src/main/java/cn/hutool/core/map/BiMap.java b/hutool-core/src/main/java/cn/hutool/core/map/BiMap.java index 3ce87cc9f..a376d71f1 100644 --- a/hutool-core/src/main/java/cn/hutool/core/map/BiMap.java +++ b/hutool-core/src/main/java/cn/hutool/core/map/BiMap.java @@ -30,7 +30,13 @@ public class BiMap extends MapWrapper { @Override public V put(K key, V value) { + final V oldValue = super.put(key, value); if (null != this.inverse) { + if(null != oldValue){ + // issue#I88R5M + // 如果put的key相同,value不同,需要在inverse中移除旧的关联 + this.inverse.remove(oldValue); + } this.inverse.put(value, key); } return super.put(key, value); diff --git a/hutool-core/src/test/java/cn/hutool/core/map/IssueI88R5MTest.java b/hutool-core/src/test/java/cn/hutool/core/map/IssueI88R5MTest.java new file mode 100644 index 000000000..aefb9f0fc --- /dev/null +++ b/hutool-core/src/test/java/cn/hutool/core/map/IssueI88R5MTest.java @@ -0,0 +1,17 @@ +package cn.hutool.core.map; + +import org.junit.Assert; +import org.junit.Test; + +import java.util.LinkedHashMap; + +public class IssueI88R5MTest { + @Test + public void biMapTest() { + final BiMap biMap = new BiMap<>(new LinkedHashMap<>()); + biMap.put("aaa", 111); + biMap.getKey(111); + biMap.put("aaa", 222); + Assert.assertNull(biMap.getKey(111)); + } +}