enhance CollUtil.zip

This commit is contained in:
Looly 2019-08-20 10:59:24 +08:00
parent 2f44d68e0b
commit ac7a6edb25
3 changed files with 29 additions and 11 deletions

View File

@ -6,6 +6,8 @@
## 4.6.3
### 新特性
* 【core】 改进CollUtil.zip逻辑减少内存复制issue#I10T01@Gitee
### Bug修复
* 【http】 修复HttpRquest中body方法长度计算问题issue#I10UPG@Gitee

View File

@ -1517,13 +1517,14 @@ public class CollUtil {
return null;
}
final List<K> keyList = new ArrayList<K>(keys);
final List<V> valueList = new ArrayList<V>(values);
final int size = Math.min(keys.size(), values.size());
final Map<K, V> map = new HashMap<K, V>((int) (size / 0.75));
for (int i = 0; i < size; i++) {
map.put(keyList.get(i), valueList.get(i));
int entryCount = Math.min(keys.size(), values.size());
final Map<K, V> map = newHashMap(entryCount);
final Iterator<K> keyIterator = keys.iterator();
final Iterator<V> valueIterator = values.iterator();
while (entryCount > 0) {
map.put(keyIterator.next(), valueIterator.next());
entryCount--;
}
return map;

View File

@ -547,12 +547,12 @@ public class CollUtilTest {
Assert.assertEquals(CollUtil.newArrayList(4, 3, 2, 1), sortPageAll);
}
@Test
public void containsAnyTest() {
ArrayList<Integer> list1 = CollUtil.newArrayList(1, 2, 3, 4, 5);
ArrayList<Integer> list2 = CollUtil.newArrayList(5, 3, 1, 9, 11);
Assert.assertTrue(CollUtil.containsAny(list1, list2));
}
@ -560,10 +560,10 @@ public class CollUtilTest {
public void containsAllTest() {
ArrayList<Integer> list1 = CollUtil.newArrayList(1, 2, 3, 4, 5);
ArrayList<Integer> list2 = CollUtil.newArrayList(5, 3, 1);
Assert.assertTrue(CollUtil.containsAll(list1, list2));
}
@Test
public void getLastTest() {
// 测试空数组返回null而不是报错
@ -571,4 +571,19 @@ public class CollUtilTest {
String last = CollUtil.getLast(test);
Assert.assertNull(last);
}
@Test
public void zipTest() {
Collection<String> keys = CollUtil.newArrayList("a", "b", "c", "d");
Collection<Integer> values = CollUtil.newArrayList(1, 2, 3, 4);
Map<String, Integer> map = CollUtil.zip(keys, values);
Assert.assertEquals(4, map.size());
Assert.assertEquals(1, map.get("a").intValue());
Assert.assertEquals(2, map.get("b").intValue());
Assert.assertEquals(3, map.get("c").intValue());
Assert.assertEquals(4, map.get("d").intValue());
}
}