2012-05-06 8 views
0

文字列のハッシュコードを使用しようとしていますが、モジュラスは配列の長さを使用してハッシュテーブルの格納場所のインデックスを取得しようとしています。配列のハッシュコード()モジュラス長を使用するとNULLポインタ例外が返される

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

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ポインタを削除し、含まれている私はそれをめちゃくちゃだと思うのはここですメソッドの戻り値は常にfalseを返します。

私は間違っています。おかげさまで

答えて

4
list = new Bucket[8]; 

はそれだけnull値を持つ完全な配列を割り当て、任意Bucketオブジェクトを割り当てません。

したがって、list[key.hashCode()%list.length] == nullは(戻りnull、およびlist[key.hashCode()%list.length].remove(...)またはlist[key.hashCode()%list.length].insert(...)は、あなたがしようとすると、その順番にNPEが発生するアクセスnull、する原因となる理由を説明します)。

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

+0

素晴らしいです!ありがとう! – Sam

関連する問題