如何检查子列表是否位于较大列表的某个“窗口”中?

时间:2012-12-01 06:25:57

标签: java sorting arraylist

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

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)。

2 个答案:

答案 0 :(得分: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,并且不会创建新数组,无需担心性能。

答案 1 :(得分:1)

return Collections.indexOfSubList(list.subList(start, end), subList) != -1;