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 加载因子
|
* @param loadFactor 加载因子
|
||||||
*/
|
*/
|
||||||
public CaseInsensitiveLinkedMap(final int initialCapacity, final float loadFactor) {
|
public CaseInsensitiveLinkedMap(final int initialCapacity, final float loadFactor) {
|
||||||
super(new LinkedHashMap<>(initialCapacity, loadFactor));
|
super(MapBuilder.of(new LinkedHashMap<>(initialCapacity, loadFactor)));
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------- Constructor end
|
// ------------------------------------------------------------------------- Constructor end
|
||||||
}
|
}
|
||||||
|
@@ -49,7 +49,7 @@ public class CaseInsensitiveMap<K, V> extends FuncKeyMap<K, V> {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 构造<br>
|
* 构造<br>
|
||||||
* 注意此构造将传入的Map作为被包装的Map,针对任何修改,传入的Map都会被同样修改。
|
* 注意此构造将传入的Map所有值复制到当前map中,不修改传入map。
|
||||||
*
|
*
|
||||||
* @param m 被包装的自定义Map创建器
|
* @param m 被包装的自定义Map创建器
|
||||||
*/
|
*/
|
||||||
|
@@ -14,7 +14,6 @@ package org.dromara.hutool.core.map;
|
|||||||
|
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.SortedMap;
|
|
||||||
import java.util.TreeMap;
|
import java.util.TreeMap;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -49,23 +48,13 @@ public class CaseInsensitiveTreeMap<K, V> extends CaseInsensitiveMap<K, V> {
|
|||||||
this.putAll(m);
|
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}表示使用默认比较器
|
* @param comparator 比较器,{@code null}表示使用默认比较器
|
||||||
*/
|
*/
|
||||||
public CaseInsensitiveTreeMap(final Comparator<? super K> comparator) {
|
public CaseInsensitiveTreeMap(final Comparator<? super K> comparator) {
|
||||||
super(new TreeMap<>(comparator));
|
super(MapBuilder.of(new TreeMap<>(comparator)));
|
||||||
}
|
}
|
||||||
// ------------------------------------------------------------------------- Constructor end
|
// ------------------------------------------------------------------------- Constructor end
|
||||||
}
|
}
|
||||||
|
@@ -16,6 +16,9 @@ import org.junit.jupiter.api.Assertions;
|
|||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
public class CaseInsensitiveMapTest {
|
public class CaseInsensitiveMapTest {
|
||||||
|
|
||||||
@@ -23,16 +26,16 @@ public class CaseInsensitiveMapTest {
|
|||||||
public void caseInsensitiveMapTest() {
|
public void caseInsensitiveMapTest() {
|
||||||
final CaseInsensitiveMap<String, String> map = new CaseInsensitiveMap<>();
|
final CaseInsensitiveMap<String, String> map = new CaseInsensitiveMap<>();
|
||||||
map.put("aAA", "OK");
|
map.put("aAA", "OK");
|
||||||
Assertions.assertEquals("OK", map.get("aaa"));
|
assertEquals("OK", map.get("aaa"));
|
||||||
Assertions.assertEquals("OK", map.get("AAA"));
|
assertEquals("OK", map.get("AAA"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void caseInsensitiveLinkedMapTest() {
|
public void caseInsensitiveLinkedMapTest() {
|
||||||
final CaseInsensitiveLinkedMap<String, String> map = new CaseInsensitiveLinkedMap<>();
|
final CaseInsensitiveLinkedMap<String, String> map = new CaseInsensitiveLinkedMap<>();
|
||||||
map.put("aAA", "OK");
|
map.put("aAA", "OK");
|
||||||
Assertions.assertEquals("OK", map.get("aaa"));
|
assertEquals("OK", map.get("aaa"));
|
||||||
Assertions.assertEquals("OK", map.get("AAA"));
|
assertEquals("OK", map.get("AAA"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -44,6 +47,42 @@ public class CaseInsensitiveMapTest {
|
|||||||
map.merge(b.getKey(), b.getValue(), (A, B) -> A);
|
map.merge(b.getKey(), b.getValue(), (A, B) -> A);
|
||||||
map.merge(a.getKey(), a.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