Simple table de hachage de la mise en œuvre à l'aide d'un tableau en Java?

Je vais avoir un problème avec la mise en œuvre d'un système très simple table de hachage à l'aide d'un tableau. Le problème est que le premier Article dans le HashTable est toujours AVAILABLE. Peut-être que vous les gars peuvent voir ce qui ne va pas. C'est le HashTable classe:

public class HashTable {
private Item[] data;
private int capacity;
private int size;
private static final Item AVAILABLE = new Item("Available", null);
public HashTable(int capacity) {
this.capacity = capacity; 
data = new Item[capacity];
for(int i = 0; i < data.length; i++) {
data[i] = AVAILABLE;
}
size = 0;
}
public int size() {
return size;
}
public int hashThis(String key) {
return key.hashCode() % capacity; 
}
public Object get(String key) {
int hash = hashThis(key);
while(data[hash] != AVAILABLE && data[hash].key() != key) {
hash = (hash + 1) % capacity;
}
return data[hash].element();
}
public void put(String key, Object element) {
if(key != null) {
size++;
int hash = hashThis(key);
while(data[hash] != AVAILABLE && data[hash].key() != key) {
hash = (hash + 1) % capacity;
}
data[hash] = new Item(key, element);
}
}
public Object remove(String key) {
//not important now.
throw new UnsupportedOperationException("Can't remove");
}
public String toString() {
String s = "<HashTable[";
for(int i = 0; i < this.size(); i++) {
s += data[i].toString();
if(i < this.size() - 1) {
s += ",";
}
}
s += "]>";
return s;
}
}

Pour plus de clarté, c'est le Item classe:

public class Item {
private String key;
private Object element;
public Item(String key, Object element) {
this.setKey(key);
this.setElement(element);
}
public String key() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public Object element() {
return element;
}
public void setElement(Object element) {
this.element = element;
}
public String toString() {
String s = "<Item(";
s += this.key() + "," + this.element() + ")>";
return s;
}
}

Pour donner un exemple:

HashTable ht = new HashTable(10);
ht.put("1", "a");

La sortie de toString() après la mise doit être:

"<HashTable[<Item(1,a)>]>"

mais j'obtiens:

"<HashTable[<Item(Available,null)>]>"

mise à jour: je devrais probablement mentionner que l'Élément suivant est mis correctement et celle d'après qui n'est pas nouveau.

OriginalL'auteur Loolooii | 2012-03-31