From e46474fc9a7ea3f98d28bbeeba38632e9fd835d2 Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 18 Oct 2023 08:57:30 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=89=B9=E5=AE=9A=E6=83=85?= =?UTF-8?q?=E5=86=B5=E4=B8=8BBiMap=E8=A6=86=E7=9B=96Value=E5=90=8E?= =?UTF-8?q?=EF=BC=8C=E4=BB=8D=E8=83=BD=E9=80=9A=E8=BF=87=E6=97=A7Value?= =?UTF-8?q?=E6=9F=A5=E8=AF=A2=E5=88=B0Key=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 3 ++- .../src/main/java/cn/hutool/core/map/BiMap.java | 6 ++++++ .../cn/hutool/core/map/IssueI88R5MTest.java | 17 +++++++++++++++++ 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 hutool-core/src/test/java/cn/hutool/core/map/IssueI88R5MTest.java 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)); + } +}