给定一个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)。
答案 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;