2011-11-15 6 views
1

ArrayListまたはLinkedListをバックエンドとして使用して、Bagデータ型の実装を依頼しています。私はArrayListを選び、Collectionインタフェースのローカル実装を含め、独自の実装を作成しました。今、私はリストの中にリストを挿入するmyListクラスを使って、Bagのプロパティをどのように適合させるかの基本的なコンセプトに苦しんでいます。 ジェネリックにArraylistベースのバッグ/マルチセットを実装する

私のリストが設定されている方法

は、私は、サイズを追加、削除実装

public interface Collection<E> 

として私自身のコレクションのインターフェイスタイプを書いた理由で実装されていないすべてのメソッドを除き、通常のJava型を、次の、clear、contains、isEmptyおよびtoArrayメソッド

リスト型が宣言されているように3つのプライベートフィールドを持つ

public class List<E> implements Collection<E> 

private int size; 
private E[] data; 
private int growSize=10; 

E[] dataが必要とされているものの要素タイプを保持し、growSizeリストを高めるために、新たなスロットの数であります必要に応じてサイズを変更します。これは、Listが単一のオブジェクトに対して伝統的に使用されている場合に効果的ですが、List型を挿入しようとするとエラーが発生します。

私は、このメソッドを実装しようとしている。まず

  • :私はこれをしようとすると

    public boolean add(Collection<E> c){ 
        if (size < data.length){ 
        data= (E[]) new Object[10]; 
        data[0]= c; 
        } 
    } 
    

    、それは型の不一致二

    コレクションとE.の間に疑問があると言いますJavaのジェネリックのどのようなルールをここで壊しているのですか?
  • 第2に、それを修正するために何が必要ですか?
+0

それを引き起こし、あなたのエラーとコードに関する詳細情報を提供し、 –

+0

Eは、タイプ一覧のものとすることができるしてください。あなたはどんなエラーを出していますか? – JustinKSU

+0

'add'は何をしますか?単一の要素を追加しますか?またはいくつかのコレクションからすべての要素を追加しますか? – newacct

答えて

3

パラメータ化された型を2つの異なる型に使用することはできません。あなたの場合(私が手に入れたら)、EとタイプCollection<E>の両方にパラメータ化タイプEを使用しようとしています。

List<E>に2つの異なるタイプがある場合は、実際にはGenericsを使用していません。リストなしでスーパータイプコレクションを宣言できます。

Eの各オブジェクトがリスト内の要素になるように、タイプEのオブジェクトのリストを受け入れ、それぞれをList<E>に1つずつ追加しようとしている場合は、あなたのような何かに実装を変更する必要があります。

public boolean addAll(Collection<E> c) { 
    for(E e : c) { 
    this.add(e); 
    } 
} 
関連する問題