diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/map/CaseInsensitiveLinkedMap.java b/hutool-core/src/main/java/org/dromara/hutool/core/map/CaseInsensitiveLinkedMap.java index 6dcab1f5d..9f80a1d56 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/map/CaseInsensitiveLinkedMap.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/map/CaseInsensitiveLinkedMap.java @@ -73,7 +73,7 @@ public class CaseInsensitiveLinkedMap extends CaseInsensitiveMap { * @param loadFactor 加载因子 */ public CaseInsensitiveLinkedMap(final int initialCapacity, final float loadFactor) { - super(new LinkedHashMap<>(initialCapacity, loadFactor)); + super(MapBuilder.of(new LinkedHashMap<>(initialCapacity, loadFactor))); } // ------------------------------------------------------------------------- Constructor end } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/map/CaseInsensitiveMap.java b/hutool-core/src/main/java/org/dromara/hutool/core/map/CaseInsensitiveMap.java index 7c00e5b9d..31a2afe53 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/map/CaseInsensitiveMap.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/map/CaseInsensitiveMap.java @@ -49,7 +49,7 @@ public class CaseInsensitiveMap extends FuncKeyMap { /** * 构造
- * 注意此构造将传入的Map作为被包装的Map,针对任何修改,传入的Map都会被同样修改。 + * 注意此构造将传入的Map所有值复制到当前map中,不修改传入map。 * * @param m 被包装的自定义Map创建器 */ diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/map/CaseInsensitiveTreeMap.java b/hutool-core/src/main/java/org/dromara/hutool/core/map/CaseInsensitiveTreeMap.java index 7d545172c..8c2a49b5e 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/map/CaseInsensitiveTreeMap.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/map/CaseInsensitiveTreeMap.java @@ -14,7 +14,6 @@ package org.dromara.hutool.core.map; import java.util.Comparator; import java.util.Map; -import java.util.SortedMap; import java.util.TreeMap; /** @@ -49,23 +48,13 @@ public class CaseInsensitiveTreeMap extends CaseInsensitiveMap { this.putAll(m); } - /** - * 构造 - * - * @param m Map,初始Map,键值对会被复制到新的TreeMap中 - * @since 3.1.2 - */ - public CaseInsensitiveTreeMap(final SortedMap m) { - super(new TreeMap(m)); - } - /** * 构造 * * @param comparator 比较器,{@code null}表示使用默认比较器 */ public CaseInsensitiveTreeMap(final Comparator comparator) { - super(new TreeMap<>(comparator)); + super(MapBuilder.of(new TreeMap<>(comparator))); } // ------------------------------------------------------------------------- Constructor end } diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/map/CaseInsensitiveMapTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/map/CaseInsensitiveMapTest.java index 146361ef3..cbe33a71b 100644 --- a/hutool-core/src/test/java/org/dromara/hutool/core/map/CaseInsensitiveMapTest.java +++ b/hutool-core/src/test/java/org/dromara/hutool/core/map/CaseInsensitiveMapTest.java @@ -16,6 +16,9 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; + +import static org.junit.jupiter.api.Assertions.assertEquals; public class CaseInsensitiveMapTest { @@ -23,16 +26,16 @@ public class CaseInsensitiveMapTest { public void caseInsensitiveMapTest() { final CaseInsensitiveMap map = new CaseInsensitiveMap<>(); map.put("aAA", "OK"); - Assertions.assertEquals("OK", map.get("aaa")); - Assertions.assertEquals("OK", map.get("AAA")); + assertEquals("OK", map.get("aaa")); + assertEquals("OK", map.get("AAA")); } @Test public void caseInsensitiveLinkedMapTest() { final CaseInsensitiveLinkedMap map = new CaseInsensitiveLinkedMap<>(); map.put("aAA", "OK"); - Assertions.assertEquals("OK", map.get("aaa")); - Assertions.assertEquals("OK", map.get("AAA")); + assertEquals("OK", map.get("aaa")); + assertEquals("OK", map.get("AAA")); } @Test @@ -44,6 +47,42 @@ public class CaseInsensitiveMapTest { map.merge(b.getKey(), b.getValue(), (A, B) -> A); map.merge(a.getKey(), a.getValue(), (A, B) -> A); - Assertions.assertEquals(1, map.size()); + assertEquals(1, map.size()); + } + + @Test + public void issueIA4K4FTest() { + final Map map = new CaseInsensitiveLinkedMap<>(); + map.put("b", 2); + map.put("a", 1); + + final AtomicInteger index = new AtomicInteger(); + map.forEach((k, v) -> { + if(0 == index.get()){ + assertEquals("b", k); + } else if(1 == index.get()){ + assertEquals("a", k); + } + + index.getAndIncrement(); + }); + } + + @Test + public void issueIA4K4FTest2() { + final Map map = new CaseInsensitiveTreeMap<>(); + map.put("b", 2); + map.put("a", 1); + + final AtomicInteger index = new AtomicInteger(); + map.forEach((k, v) -> { + if(0 == index.get()){ + assertEquals("a", k); + } else if(1 == index.get()){ + assertEquals("b", k); + } + + index.getAndIncrement(); + }); } }