所以我有一個哈希表類,它工作正常,但我想它打印出來一樣的內容,以便:在java中打印hashmap?
1 -> 101 -> 201 (this is a bucket for handling collision) 2
3 - > 103 - > 203
4
5
換句話說,我只是想知道如何讓我的程序打印出我的散列表的內容,使其看起來像那樣。任何意見或建議將不勝感激。我是哈希映射的新手,所以這很混亂。
而我不知道該怎麼做。
這是我的散列映射類,如果有幫助:
public class HashMap<K, V> {
private int DEFAULT_CAPACITY = 10;
private MapEntry<K, V>[] Hash;
private int size;
public HashMap() {
Hash = new MapEntry[DEFAULT_CAPACITY];
}
public int getHashCode(K key) {
int bucketIndex = key.hashCode() % Hash.length;
return bucketIndex;
}
public V get(K key) {
if (key == null) {
throw new IllegalArgumentException("Null Key!");
}
MapEntry<K, V> entry = Hash[getHashCode(key)];
while (entry != null && !key.equals(entry.getKey()))
entry = entry.getNext();
if (entry != null)
return entry.getValue();
else
return null;
}
/**
*
* @param key
* @param value
* The put method works by associating the specified value with
* the given key in the map.
* If the key is already in the map,
* the old value is replaced with the new one.
*/
public void put(K key, V value) {
int keyBucket = hash(key);
MapEntry<K, V> temp = Hash[keyBucket];
while (temp != null) {
if ((temp.key == null && key == null)
|| (temp.key != null && temp.key.equals(key))) {
temp.value = value;
return;
}
temp = temp.next;
}
Hash[keyBucket] = new MapEntry<K, V>(key, value);
size++;
}
/**
*
* @param key
* @param value
* The delete method works similarly to the put method.
* It locates the desired value in the hash, e,
* and then it removes e from the bucket, like removing a node
* from a linked list.
* Then it sets the value of e to its next node.
* And then it decreases the size of the map.
*/
public void delete(K key, V value) {
if (key == null) {
throw new IllegalArgumentException("Null Key!");
}
int keyBucket = hash(key);
MapEntry<K, V> e = Hash[keyBucket];
while (e != null) {
if ((e.key == null && key == null)
|| (e.key != null && e.key.equals(key))) {
e.value = value;
return;
}
e = e.next;
}
Hash[keyBucket] = new MapEntry<K, V>(key, value);
size--;
}
public void print(){
//THIS IS WHERE I NEED HELP
}
private int hash(K key) {
if (key == null) {
return 0;
} else {
return Math.abs(key.hashCode() % this.Hash.length);
}
} }
或者,您可以當你循環時'System.out.print()'和'System.out.println()'的組合。這具有節省內存的優點。 – 2013-04-28 22:17:40
@ Code-Guru是的,它可以節省內存。不幸的是以較慢的系統(IO)調用爲代價。 – shams 2013-04-29 00:26:56
好點。這是規範時間與空間折中的另一個例子。 – 2013-04-29 14:03:11