From 3f9c9c6252a70892a91c1f37552ec26c7a05fe75 Mon Sep 17 00:00:00 2001 From: Looly Date: Wed, 18 Oct 2023 08:57:36 +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 --- .../org/dromara/hutool/core/map/BiMap.java | 6 ++++ .../dromara/hutool/core/map/BiMapTest.java | 8 ++--- .../hutool/core/map/IssueI88R5MTest.java | 29 +++++++++++++++++++ 3 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 hutool-core/src/test/java/org/dromara/hutool/core/map/IssueI88R5MTest.java diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/map/BiMap.java b/hutool-core/src/main/java/org/dromara/hutool/core/map/BiMap.java index e778c2d96..a4d7e18e0 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/map/BiMap.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/map/BiMap.java @@ -42,7 +42,13 @@ public class BiMap extends MapWrapper { @Override public V put(final K key, final 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/org/dromara/hutool/core/map/BiMapTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/map/BiMapTest.java index fb4614e20..8d5da4e04 100644 --- a/hutool-core/src/test/java/org/dromara/hutool/core/map/BiMapTest.java +++ b/hutool-core/src/test/java/org/dromara/hutool/core/map/BiMapTest.java @@ -25,8 +25,8 @@ public class BiMapTest { biMap.put("aaa", 111); biMap.put("bbb", 222); - Assertions.assertEquals(new Integer(111), biMap.get("aaa")); - Assertions.assertEquals(new Integer(222), biMap.get("bbb")); + Assertions.assertEquals(Integer.valueOf(111), biMap.get("aaa")); + Assertions.assertEquals(Integer.valueOf(222), biMap.get("bbb")); Assertions.assertEquals("aaa", biMap.getKey(111)); Assertions.assertEquals("bbb", biMap.getKey(222)); @@ -39,7 +39,7 @@ public class BiMapTest { biMap.put("bbb", 222); biMap.computeIfAbsent("ccc", s -> 333); - Assertions.assertEquals(new Integer(333), biMap.get("ccc")); + Assertions.assertEquals(Integer.valueOf(333), biMap.get("ccc")); Assertions.assertEquals("ccc", biMap.getKey(333)); } @@ -50,7 +50,7 @@ public class BiMapTest { biMap.put("bbb", 222); biMap.putIfAbsent("ccc", 333); - Assertions.assertEquals(new Integer(333), biMap.get("ccc")); + Assertions.assertEquals(Integer.valueOf(333), biMap.get("ccc")); Assertions.assertEquals("ccc", biMap.getKey(333)); } } diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/map/IssueI88R5MTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/map/IssueI88R5MTest.java new file mode 100644 index 000000000..dd7b5f223 --- /dev/null +++ b/hutool-core/src/test/java/org/dromara/hutool/core/map/IssueI88R5MTest.java @@ -0,0 +1,29 @@ +/* + * Copyright (c) 2023. looly(loolly@aliyun.com) + * Hutool is licensed under Mulan PSL v2. + * You can use this software according to the terms and conditions of the Mulan PSL v2. + * You may obtain a copy of Mulan PSL v2 at: + * https://license.coscl.org.cn/MulanPSL2 + * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, + * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, + * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. + * See the Mulan PSL v2 for more details. + */ + +package org.dromara.hutool.core.map; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.util.LinkedHashMap; + +public class IssueI88R5MTest { + @Test + void biMapTest() { + final BiMap biMap = new BiMap<>(new LinkedHashMap<>()); + biMap.put("aaa", 111); + biMap.getKey(111); + biMap.put("aaa", 222); + Assertions.assertNull(biMap.getKey(111)); + } +}