ListUtil.setOrPadding增加重载,可选限制index大小

This commit is contained in:
Looly 2024-05-17 09:32:45 +08:00
parent b235c29101
commit a99adf6091
2 changed files with 28 additions and 5 deletions

View File

@ -2,7 +2,7 @@
# 🚀Changelog
-------------------------------------------------------------------------------------------------------------
# 5.8.28(2024-05-13)
# 5.8.28(2024-05-17)
### 🐣新特性
* 【core 】 修正XmlUtil的omitXmlDeclaration描述注释issue#I9CPC7@Gitee
@ -21,6 +21,7 @@
* 【http 】 HttpRequest#get不再尝试File路径issue#I9O6DA@Gitee
* 【core 】 增加IdConstants提高Snowflake初始化性能issue#3581@Github
* 【core 】 优化 CharSequenceUtil工具类 startWithAny()、startWithAnyIgnoreCase() 参数命名错误问题pr#1219@Gitee
* 【core 】 ListUtil.setOrPadding增加重载可选限制index大小issue#3586@Github
### 🐞Bug修复
* 【http 】 修复HttpUtil.urlWithFormUrlEncoded方法重复编码问题issue#3536@Github

View File

@ -2,6 +2,7 @@ package cn.hutool.core.collection;
import cn.hutool.core.comparator.PinyinComparator;
import cn.hutool.core.comparator.PropertyComparator;
import cn.hutool.core.exceptions.ValidateException;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.lang.Matcher;
import cn.hutool.core.lang.Validator;
@ -416,7 +417,8 @@ public class ListUtil {
}
/**
* 在指定位置设置元素当index小于List的长度时替换指定位置的值否则追加{@code paddingElement}直到到达index后设置值
* 在指定位置设置元素当index小于List的长度时替换指定位置的值否则追加{@code paddingElement}直到到达index后设置值<br>
* 注意为避免OOM问题此方法限制index的最大值为{@code (list.size() + 1) * 10}
*
* @param <T> 元素类型
* @param list List列表
@ -424,16 +426,36 @@ public class ListUtil {
* @param element 新元素
* @param paddingElement 填充的值
* @return 原List
* @since 58.4
* @since 5.8.4
*/
public static <T> List<T> setOrPadding(List<T> list, int index, T element, T paddingElement) {
return setOrPadding(list, index, element, paddingElement, (list.size() + 1) * 10);
}
/**
* 在指定位置设置元素当index小于List的长度时替换指定位置的值否则追加{@code paddingElement}直到到达index后设置值
*
* @param <T> 元素类型
* @param list List列表
* @param index 位置
* @param element 新元素
* @param paddingElement 填充的值
* @param indexLimit 最大索引限制
* @return 原List
* @since 5.8.28
*/
public static <T> List<T> setOrPadding(List<T> list, int index, T element, T paddingElement, int indexLimit) {
Assert.notNull(list, "List must be not null !");
final int size = list.size();
if (index < size) {
list.set(index, element);
} else {
// issue#3286, 增加安全检查最多增加10倍
Validator.checkIndexLimit(index, list.size());
if(indexLimit > 0){
// issue#3286, 增加安全检查
if (index > indexLimit) {
throw new ValidateException("Index [{}] is too large for limit: [{}]", index, indexLimit);
}
}
for (int i = size; i < index; i++) {
list.add(paddingElement);
}