mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-07-21 15:09:48 +08:00
修复CaseInsensitiveLinkedMap顺序错误问题
This commit is contained in:
@@ -73,7 +73,7 @@ public class CaseInsensitiveLinkedMap<K, V> extends CaseInsensitiveMap<K, V> {
|
||||
* @param loadFactor 加载因子
|
||||
*/
|
||||
public CaseInsensitiveLinkedMap(final int initialCapacity, final float loadFactor) {
|
||||
super(new LinkedHashMap<>(initialCapacity, loadFactor));
|
||||
super(MapBuilder.of(new LinkedHashMap<>(initialCapacity, loadFactor)));
|
||||
}
|
||||
// ------------------------------------------------------------------------- Constructor end
|
||||
}
|
||||
|
@@ -49,7 +49,7 @@ public class CaseInsensitiveMap<K, V> extends FuncKeyMap<K, V> {
|
||||
|
||||
/**
|
||||
* 构造<br>
|
||||
* 注意此构造将传入的Map作为被包装的Map,针对任何修改,传入的Map都会被同样修改。
|
||||
* 注意此构造将传入的Map所有值复制到当前map中,不修改传入map。
|
||||
*
|
||||
* @param m 被包装的自定义Map创建器
|
||||
*/
|
||||
|
@@ -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<K, V> extends CaseInsensitiveMap<K, V> {
|
||||
this.putAll(m);
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造
|
||||
*
|
||||
* @param m Map,初始Map,键值对会被复制到新的TreeMap中
|
||||
* @since 3.1.2
|
||||
*/
|
||||
public CaseInsensitiveTreeMap(final SortedMap<? extends K, ? extends V> m) {
|
||||
super(new TreeMap<K, V>(m));
|
||||
}
|
||||
|
||||
/**
|
||||
* 构造
|
||||
*
|
||||
* @param comparator 比较器,{@code null}表示使用默认比较器
|
||||
*/
|
||||
public CaseInsensitiveTreeMap(final Comparator<? super K> comparator) {
|
||||
super(new TreeMap<>(comparator));
|
||||
super(MapBuilder.of(new TreeMap<>(comparator)));
|
||||
}
|
||||
// ------------------------------------------------------------------------- Constructor end
|
||||
}
|
||||
|
@@ -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<String, String> 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<String, String> 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<String, Object> 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<String, Object> 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();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user