我正在实现自己的LinkedList类。
对于sublist(int a,int b function)方法,mycode无法正常工作。如果进行了任何更改,也应该在此方法之后根据(a和b索引)(我成功)返回列表的子列表在子列表中,列表也必须生效(不成功)。例如,如果我执行
(list.sublist(1,4)).clear
:列表1到4的元素也应该清除。
我的代码是:
public List<E> subList(int arg0, int arg1) {
ArrayList<E> ar = new ArrayList<E>();
ListIterator myiter=listIterator(arg0);
int k = arg1 - arg0 + 1;
int i;
for(i = 0; i < k; ++i) {
ar.add((E) myiter.next());
}
List <E> sublist=new GITLinkedList(ar);
return sublist;
}
答案 0 :(得分:1)
为什么不返回扩展List
的类并覆盖一些内部方法,以欺骗其他类只考虑它的子集。
例如,在您的子列表方法中,您可以执行此操作...
public List<E> subList(int startPosition, int endPosition) {
return new SmallerList(this,startPosition,endPosition);
}
并创建一个SmallerList
类,如此......
public class SmallerList extends List {
List parentList = null;
int startPosition = 0;
int endPosition = 0;
public SmallerList(List parentList, int startPosition, int endPosition){
this.parentList = parentList;
this.startPosition = startPosition;
this.endPosition = endPosition;
}
// overwrite some directly to appear smaller
public int size(){
return endPosition-startPosition;
}
// overwrite others to make adjustments to the correct position in the parentList
public void add(int index, Object object){
parentList.add(index+startPosition,object);
}
// overwrite others to only search between startPosition and endPosition
public boolean contains (Object object){
for (int i=startPosition;i<endPosition;i++){
if (parentList.get(i).equals(object)){
return true;
}
}
return false;
}
// etc. for all other methods of List.
}
使用这种方法,所有方法仍然对基础parentList
起作用,但对SmallerList
的任何查询,例如add()
,get()
,contains()
, size()
,都被欺骗,以为他们只是在较小的List
上工作