0

给定一个数组列表和两个开始和结束索引,如何检查某个子数组列表是否存在于“窗口”中,即在索引之间。

IE

private ArrayList<Character> list = new ArrayList<Character>;
private int start = 2, end = 6;
private ArrayList<Character> sublist = new ArrayList<Character>;

boolean present = isPresent();

如何有效地实现这个 isPresent() 方法?我将在运行时编码算法中使用此方法来压缩文本文件(我需要先将其读入 ArrayList)。

4

2 回答 2

1

我希望这就是你要找的

boolean iPresent(List l1, int start, int end, List l2) {
    for (int i = start; i < end; i++) {
        if (l2.size() > end - i) {
            break;
        }
        if (l1.get(i).equals(l2.get(0))) {
            return l1.subList(i, i + l2.size()).equals(l2);
        }
    }
    return false;
}

请注意 subList() 返回一个由其父列表支持的 List 并且不会创建新数组,无需担心性能。

于 2012-12-01T06:46:01.403 回答
1
return Collections.indexOfSubList(list.subList(start, end), subList) != -1;
于 2012-12-01T15:41:15.447 回答