0

配列リストと2つの開始インデックスと終了インデックスがある場合、特定のサブ配列リストが「ウィンドウ」内、つまりインデックス間に存在するかどうかをどのように確認できますか。

すなわち

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()は、親リストに基づくリストを返し、新しい配列を作成しないことに注意してください。パフォーマンスについて心配する必要はありません。

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