您可以扩展AbstractList(或者您正在使用的抽象类型的集合)
在此抽象中,您可以在构造函数中获取源集合并持有对它的引用,以及该视图的开始和结束点原始列表
覆盖添加/使这些行动也对源集合执行的同时移除/ 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中有效地应该是一个Proxy到原始列表。
另外,与更多的工作,你可以实现的集合或列表界面,让你在一个类似的方式原来名单上的直接工作
然后,您可以打电话给你的方法或通过周围ListView控件作为你会收集一个正常的。
即
public void doSomeWork(Collection<String> collection);
...
object.doSomeWork(new ListView<String>(original, 0, 2));
如果你什么'B.remove(3);''给3'仅在? –
我会说'subList',但这并不完全符合你的要求(视图看起来从来没有改变大小,即使你添加了东西)。 –
@JoachimSauer:视图可以通过'subList()'改变大小。 – Keppil