mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-05-09 23:51:34 +08:00
修复ArrayUtil.lastIndexOfSub递归改为循环
This commit is contained in:
parent
ef299062f8
commit
0f30cd7dde
@ -1824,21 +1824,34 @@ public class ArrayUtil extends PrimitiveArrayUtil {
|
|||||||
* @since 5.4.8
|
* @since 5.4.8
|
||||||
*/
|
*/
|
||||||
public static <T> int indexOfSub(T[] array, int beginInclude, T[] subArray) {
|
public static <T> int indexOfSub(T[] array, int beginInclude, T[] subArray) {
|
||||||
if (isEmpty(array) || isEmpty(subArray) || subArray.length > array.length) {
|
if (isEmpty(array) || isEmpty(subArray)) {
|
||||||
return INDEX_NOT_FOUND;
|
return INDEX_NOT_FOUND;
|
||||||
}
|
}
|
||||||
int firstIndex = indexOf(array, subArray[0], beginInclude);
|
if(beginInclude < 0){
|
||||||
if (firstIndex < 0 || firstIndex + subArray.length > array.length) {
|
beginInclude += array.length;
|
||||||
|
}
|
||||||
|
if(beginInclude < 0 || beginInclude > array.length - 1){
|
||||||
|
return INDEX_NOT_FOUND;
|
||||||
|
}
|
||||||
|
if (array.length - beginInclude < subArray.length) {
|
||||||
|
// 剩余长度不足
|
||||||
return INDEX_NOT_FOUND;
|
return INDEX_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < subArray.length; i++) {
|
for (int i = beginInclude; i <= array.length - subArray.length; i++) {
|
||||||
if (false == ObjectUtil.equal(array[i + firstIndex], subArray[i])) {
|
boolean found = true;
|
||||||
return indexOfSub(array, firstIndex + 1, subArray);
|
for (int j = 0; j < subArray.length; j++) {
|
||||||
|
if (ObjUtil.notEqual(array[i + j], subArray[j])) {
|
||||||
|
found = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (found) {
|
||||||
|
return i;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return firstIndex;
|
return INDEX_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1871,35 +1884,37 @@ public class ArrayUtil extends PrimitiveArrayUtil {
|
|||||||
if (isEmpty(array) || isEmpty(subArray)) {
|
if (isEmpty(array) || isEmpty(subArray)) {
|
||||||
return INDEX_NOT_FOUND;
|
return INDEX_NOT_FOUND;
|
||||||
}
|
}
|
||||||
if(endInclude < 0){
|
if (endInclude < 0) {
|
||||||
endInclude += array.length;
|
endInclude += array.length;
|
||||||
}
|
}
|
||||||
if(endInclude < 0){
|
if (endInclude < 0) {
|
||||||
return INDEX_NOT_FOUND;
|
return INDEX_NOT_FOUND;
|
||||||
}
|
}
|
||||||
if(endInclude > array.length - 1){
|
if (endInclude > array.length - 1) {
|
||||||
// 结束位置超过最大值
|
// 结束位置超过最大值
|
||||||
endInclude = array.length - 1;
|
endInclude = array.length - 1;
|
||||||
}
|
}
|
||||||
if(subArray.length - 1 > endInclude){
|
if (subArray.length - 1 > endInclude) {
|
||||||
// 剩余长度不足
|
// 剩余长度不足
|
||||||
return INDEX_NOT_FOUND;
|
return INDEX_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
final int firstIndex = lastIndexOf(array, subArray[0], endInclude);
|
for (int i = Math.min(array.length - subArray.length, endInclude); i >= 0; i--) {
|
||||||
if (firstIndex < 0 || firstIndex + subArray.length > array.length) {
|
boolean found = true;
|
||||||
|
for (int j = 0; j < subArray.length; j++) {
|
||||||
|
if (ObjUtil.notEqual(array[i + j], subArray[j])) {
|
||||||
|
found = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (found) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return INDEX_NOT_FOUND;
|
return INDEX_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < subArray.length; i++) {
|
|
||||||
if (ObjUtil.notEqual(array[i + firstIndex], subArray[i])) {
|
|
||||||
return lastIndexOfSub(array, firstIndex - 1, subArray);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return firstIndex;
|
|
||||||
}
|
|
||||||
|
|
||||||
// O(n)时间复杂度检查数组是否有序
|
// O(n)时间复杂度检查数组是否有序
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
x
Reference in New Issue
Block a user