0

独自の 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;
}
4

1 に答える 1

2

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へのクエリはすべて、より小さなものでのみ動作していると考えるようにだまされます。SmallerListadd()get()contains()size()List

于 2012-04-08T11:31:13.873 に答える