mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
fix:CollUtil.split优化切割列表参数判断,避免OOM
This commit is contained in:
parent
7af3344b5e
commit
d343051db5
@ -8,7 +8,7 @@
|
|||||||
* 【core 】 SerializeUtil.deserialize增加白名单类,避免RCE vulnerability(issue#3021@Github)
|
* 【core 】 SerializeUtil.deserialize增加白名单类,避免RCE vulnerability(issue#3021@Github)
|
||||||
|
|
||||||
### 🐞Bug修复
|
### 🐞Bug修复
|
||||||
|
* 【core 】 CollUtil.split优化切割列表参数判断,避免OOM
|
||||||
-------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------
|
||||||
# 5.8.16 (2023-03-26)
|
# 5.8.16 (2023-03-26)
|
||||||
|
|
||||||
|
@ -371,7 +371,7 @@ public class CollUtil {
|
|||||||
result.addAll(coll1);
|
result.addAll(coll1);
|
||||||
}
|
}
|
||||||
result.removeAll(coll2);
|
result.removeAll(coll2);
|
||||||
} catch (UnsupportedOperationException e){
|
} catch (UnsupportedOperationException e) {
|
||||||
// 针对 coll1 为只读集合的补偿
|
// 针对 coll1 为只读集合的补偿
|
||||||
result = CollUtil.create(AbstractCollection.class);
|
result = CollUtil.create(AbstractCollection.class);
|
||||||
result.addAll(coll1);
|
result.addAll(coll1);
|
||||||
@ -1189,11 +1189,12 @@ public class CollUtil {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayList<T> subList = new ArrayList<>(size);
|
int initSize = Math.min(collection.size(), size);
|
||||||
|
List<T> subList = new ArrayList<>(initSize);
|
||||||
for (T t : collection) {
|
for (T t : collection) {
|
||||||
if (subList.size() >= size) {
|
if (subList.size() >= size) {
|
||||||
result.add(subList);
|
result.add(subList);
|
||||||
subList = new ArrayList<>(size);
|
subList = new ArrayList<>(initSize);
|
||||||
}
|
}
|
||||||
subList.add(t);
|
subList.add(t);
|
||||||
}
|
}
|
||||||
|
@ -255,6 +255,14 @@ public class CollUtilTest {
|
|||||||
Assert.assertEquals(3, split.get(0).size());
|
Assert.assertEquals(3, split.get(0).size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void splitTest2() {
|
||||||
|
final ArrayList<Integer> list = CollUtil.newArrayList(1, 2, 3, 4, 5, 6, 7, 8, 9);
|
||||||
|
final List<List<Integer>> split = CollUtil.split(list, Integer.MAX_VALUE);
|
||||||
|
Assert.assertEquals(3, split.size());
|
||||||
|
Assert.assertEquals(3, split.get(0).size());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void foreachTest() {
|
public void foreachTest() {
|
||||||
final HashMap<String, String> map = MapUtil.newHashMap();
|
final HashMap<String, String> map = MapUtil.newHashMap();
|
||||||
|
Loading…
x
Reference in New Issue
Block a user