0

文字列のハッシュコードと配列の長さのモジュラスを使用して、ハッシュテーブルの格納場所のインデックスを取得しようとしています。これが私がそれを台無しにしていると思うところです:

配列宣言とコンストラクター:

private Bucket[] list;

public Hash() {
    list = new Bucket[8];
}

そして実際のコード:

//if such a key exists already, you should replace its value
public void insert(String key, Textbook value) {
    rehash();
    if(list[key.hashCode()%list.length].insert(key, value)) size++;
}

//checks if the key exists
public boolean contains(String key) {
    return (list[key.hashCode()%list.length] != null) ? list[key.hashCode()%list.length].contains(key) : false;
}

public void remove(String key) {
    if(list[key.hashCode()%list.length].remove(key)) size --;
}

挿入および削除はnullポインターを返し、containsメソッドは常にfalseを返します。

私が間違っていること。ありがとう。

4

1 に答える 1

4
 list = new Bucket[8];

オブジェクトを割り当てず、値Bucketでいっぱいの配列のみを割り当てnullます。

したがって、 (が戻るlist[key.hashCode()%list.length] == null理由を説明します。または、にアクセスしようとすると、NPEが発生します)。contains()nulllist[key.hashCode()%list.length].remove(...)list[key.hashCode()%list.length].insert(...)null

Bucketまた、のコンストラクターまたはファクトリメソッドを使用して、配列を反復処理し、null以外の値ですべての要素を初期化する必要があります。

于 2012-05-06T21:23:20.143 に答える