AbstractList(または使用しているコレクションの抽象タイプ)を拡張できます。
この抽象化では、コンストラクターでソースコレクションを取得し、そのコレクションへの参照と、元のリストのビューの開始点と終了点を保持できます。
add / remove / setメソッドをオーバーライドして、これらのアクションがソースコレクションでも実行されるようにします。
すなわち
class ListView<T> extends AbstractList<T> {
int start = 0;
int end = 0;
private Collection<T> original = null;
public ListView(List<T> original, int start, int end) {
this.original = original;
this.start = start;
this.end = end;
super.addAll(0, original.subList(start, end));
}
// Any add/set/remove must also alter the original
}
ListViewは、事実上、元のリストのプロキシである必要があります。
または、もう少し作業を行うことで、コレクションまたはリストインターフェイスを実装して、同様の方法で元のリストを直接操作することもできます。
次に、通常のコレクションと同じように、メソッドを呼び出すか、ListViewを渡すことができます。
すなわち
public void doSomeWork(Collection<String> collection);
...
object.doSomeWork(new ListView<String>(original, 0, 2));