子列表实现



我正在实现我自己的LinkedList类。

对于子列表(int a,int b 函数)方法,mycode 不起作用 properly.it 应该根据(a 和 b 索引)(我成功)返回列表的子列表,如果对子列表进行任何更改,也必须在此方法之后返回列表的子列表(不成功)。 (list.sublist(1,4)).clear :list 从 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;
}

为什么不返回一个扩展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

相关内容

  • 没有找到相关文章

最新更新