如何从Java中的起始索引找到ArrayList的索引?

vc9ivgsu  于 2023-06-04  发布在  Java
关注(0)|答案(3)|浏览(298)

我想在ArrayList中搜索元素的索引,但我想从不同于0的索引开始搜索。
我试着这样做:

import java.util.*;

public class Test{
    public static void main(String[] args) {
        ArrayList<String> bricks = new ArrayList<String>(List.of("BBBB","CCCC","DDDD"));
        System.out.println(bricks.subList(1, bricks.size()).indexOf("CCCC"));
    }
}

输出:

0

预期输出:
我想从起始索引“1”而不是从“0”开始搜索“砖”中的“CCCC”

c9x0cxw0

c9x0cxw01#

import java.util.*;

public class Test{
    public static void main(String[] args) {
        int startIndex = 1;
        ArrayList<String> bricks = new ArrayList<String>(List.of("BBBB","CCCC","DDDD"));
        int index = bricks.subList(startIndex, bricks.size()).indexOf("CCCC");
        if(index != -1){
            index = index + startIndex;
        }
        System.out.println(index);
    }
}
c9qzyr3d

c9qzyr3d2#

代码在子列表 * 中查找索引 *。
要在原始列表中查找索引,请将用于创建子列表的索引添加到结果中:

System.out.println(bricks.subList(1, bricks.size()).indexOf("CCCC") + 1);

一些重构使这一点更清晰:

public static <T> int indexOfAfter(List<T> list, T item, int from) {
    int result = list.subList(from, list.size()).indexOf(item);
    return result == -1 ? -1 : (from + result);
}
j2cgzkjk

j2cgzkjk3#

你可以写你自己的助手:

static <T> int indexOf(List<T> list, int offset, T element) {
    for (int i = offset; i < list.size(); i++) {
        if (Objects.equals(list.get(i), element)) {
            return i;
        }
    }
    return -1;
}

注意,这对于像LinkedList的非随机接入列表可能是低效的。它还以与上界不同的方式处理下界,但这可以通过额外的检查来修复。

相关问题