2012-04-08 3 views
0

私自身のLinkedListクラスを実装しています。サブリストの実装

サブリスト(int a、int b関数)メソッドの場合、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

私はカウンタとしてループの直前にintを宣言します。 – cyo

+0

ああ、忘れてしまいました。:) –

+0

なぜカウンタはプリインクリメント( '++ i')ですか? –

答えて

1

なぜあなたはListを拡張し、そのサブセットだけを考えることに他のクラスをだますために内部メソッドの一部を上書きするクラスを返しません。

たとえば、あなたのサブリストの方法であなたはまだ、このアプローチでは...すべてのメソッドを

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. 
} 

を...

public List<E> subList(int startPosition, int endPosition) { 
    return new SmallerList(this,startPosition,endPosition); 
} 

これを行うと、そのようなSmallerListクラスを作成しますparentListに作用しますが、add()get()、、size()のようなSmallerListへのクエリはすべて、それらが

+1

これは基本的に 'java.util.LinkedList'が' sublist'を実装する方法です。 JDKでは、「SmallerList」ではなく「SmallList」ではなく「SubList」と呼んでいましたが、 –

+0

Cool、少なくともそれが私のソリューションが賢明なアイデアであることを確認するのに役立ちます:-) – wattostudios

+0

しかし、他の執行物。サブリストもリンクされている必要があります – cyo

関連する問題