diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/array/ArrayWrapper.java b/hutool-core/src/main/java/org/dromara/hutool/core/array/ArrayWrapper.java
index 20a30f66d..464b4dd0a 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/array/ArrayWrapper.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/array/ArrayWrapper.java
@@ -303,11 +303,25 @@ public class ArrayWrapper implements Wrapper, Iterable {
* @since 6.0.0
*/
public ArrayWrapper setOrPadding(final int index, final E value, final E paddingElement) {
+ return setOrPadding(index, value, paddingElement, (this.length + 1) * 10);
+ }
+
+ /**
+ * 将元素值设置为数组的某个位置,当index小于数组的长度时,替换指定位置的值,否则追加{@code paddingElement}直到到达index后,设置值
+ *
+ * @param index 位置
+ * @param value 新元素或新数组
+ * @param paddingElement 填充
+ * @param indexLimit 索引限制
+ * @return this
+ * @since 6.0.0
+ */
+ public ArrayWrapper setOrPadding(final int index, final E value, final E paddingElement, final int indexLimit) {
if (index < this.length) {
Array.set(array, index, value);
} else {
// issue#3286, 增加安全检查,最多增加10倍
- Validator.checkIndexLimit(index, this.length);
+ Validator.checkIndexLimit(index, indexLimit);
for (int i = length; i < index; i++) {
append(paddingElement);
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/collection/ListUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/collection/ListUtil.java
index 2ff88141e..66550508b 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/collection/ListUtil.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/collection/ListUtil.java
@@ -473,13 +473,31 @@ public class ListUtil {
* @since 5.8.4
*/
public static List setOrPadding(final List list, final int index, final T element, final T paddingElement) {
+ return setOrPadding(list, index, element, paddingElement, (list.size() + 1) * 10);
+ }
+
+ /**
+ * 在指定位置设置元素。当index小于List的长度时,替换指定位置的值,否则追加{@code paddingElement}直到到达index后,设置值
+ *
+ * @param 元素类型
+ * @param list List列表
+ * @param index 位置
+ * @param element 新元素
+ * @param paddingElement 填充的值
+ * @param indexLimit 最大索引限制
+ * @return 原List
+ * @since 5.8.28
+ */
+ public static List setOrPadding(final List list, final int index, final T element, final T paddingElement, final 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, size);
+ if(indexLimit > 0){
+ // issue#3286, 增加安全检查
+ Validator.checkIndexLimit(index, indexLimit);
+ }
for (int i = size; i < index; i++) {
list.add(paddingElement);
}
diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/lang/Validator.java b/hutool-core/src/main/java/org/dromara/hutool/core/lang/Validator.java
index bb5ed90f8..7dfd4f40c 100644
--- a/hutool-core/src/main/java/org/dromara/hutool/core/lang/Validator.java
+++ b/hutool-core/src/main/java/org/dromara/hutool/core/lang/Validator.java
@@ -1247,7 +1247,7 @@ public class Validator {
}
/**
- * 检查给定的index是否超出长度限制,默认检查超出倍数(10倍),此方法主要用于内部,检查包括:
+ * 检查给定的index是否超出长度限制:
*
* - 数组调用setOrPadding时,最多允许padding的长度
* - List调用setOrPadding时,最多允许padding的长度
@@ -1255,13 +1255,13 @@ public class Validator {
*
*
* @param index 索引
- * @param size 数组、列表长度
+ * @param limit 限制大小
* @since 6.0.0
*/
- public static void checkIndexLimit(final int index, final int size) {
+ public static void checkIndexLimit(final int index, final int limit) {
// issue#3286, 增加安全检查,最多增加10倍
- if (index > (size + 1) * 10) {
- throw new ValidateException("Index [{}] is too large for size: [{}]", index, size);
+ if (index > limit) {
+ throw new ValidateException("Index [{}] is too large for limit: [{}]", index, limit);
}
}
}
diff --git a/hutool-json/src/main/java/org/dromara/hutool/json/JSONArray.java b/hutool-json/src/main/java/org/dromara/hutool/json/JSONArray.java
index 704c63406..59541f43f 100644
--- a/hutool-json/src/main/java/org/dromara/hutool/json/JSONArray.java
+++ b/hutool-json/src/main/java/org/dromara/hutool/json/JSONArray.java
@@ -455,7 +455,7 @@ public class JSONArray implements JSON, JSONGetter, List