2016-09-27 4 views
0

配列を持つクラスを作成していますが、addremove、およびreplaceのメソッドを実装したいと思います。組み込みメソッドを使用せずに配列に項目を追加する方法

しかし、私は組み込みの内部構造を使用したくありません。

public class MySet { 

    public int set[]; 
    private int size = 0; 

    public MySet(int size) { 
     this.set = new int[size]; 
    } 

    public boolean add(int item) { 
     for (int i = 0; i < this.size(); i++) { 
      if (this.set[i] != 0) { 
       // add to array 
      } 
     } 
     this.size++; 
     return true; 
    } 

    public int size() 
    { 
     return this.size; 
    } 
} 

は、Javaで固定サイズの配列を初期化する場合、各項目は0に等しいです。 if this.set[i] != 0の部分は、アイテムを追加しようとしています。

私はポインタでwhileループを使うべきですか?以下のような:

public boolean add(int item) { 
    int index = 0; 
    while (index <= this.size()) { 
     if (this.set[index] != 0 || index <=) { 
      // increase pointer 
      index++; 
    } 
    this.set[index] = item; 
} 

しかし、私は、次のような配列を持っている場合は、[7、2、0、1]のリストで、それは私が必要なループの最後の項目を、取得することはできません。

これは通常どのように行われますか?

+3

現在保有しているアイテムの数を把握する必要があります。追加するたびにこの値を増やします。削除するたびに、この値を減らしてください。 –

+0

ArrayListがどのように実装されているかを見てみることをお勧めします。これは基本的にあなたがしようとしているものなので、内部配列が大きくなったり小さくなったりするのを見て、空き領域を増やしていつ割り当てるかを判断する必要があります。 http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/7u40-b43/java/util/ArrayList.java#ArrayList – nasukkin

答えて

4

あなたのように表示された入力された要素のsizeの現在のインデックスを保持する必要があります。 set[size]= itemを追加してサイズを増やすとき。 sizeがあらかじめ割り当てられた配列のサイズに達すると、サイズが増えた新しい配列を作成し(たとえば、サイズを2倍にすることができます)、古い配列を新しい配列にコピーする必要があります。

+0

これは意味があります。 重複を確認するにはどうすればよいですか?配列全体を繰り返しますか? – AAA

+0

動的配列を実装しようとしているのであれば、なぜ重複することができますか?それらは重複を許します。あなたがセットに行くのでなければ?その場合、O(n)の複雑さのために配列全体を調べるか、またはいくつかのハッシュアルゴリズムを使用して、このように実装することができます。その場合、アルゴリズムはより洗練されなければなりません。 –

関連する問題