基於LinkedList實現HashMap程式碼
package hashMap;
import java.util.LinkedList;
import connection.Linked;
/**
* 基於連結串列實現hashMap
* @author 蔣子文
*
*/
public class HashMapForLinkedList<Key, Value> {
//Entry代表linkedList裡面存相應的值 這裡是連結串列陣列型別
private LinkedList<Entry>[] link = new LinkedList[998];
//寫put()
public void put(Key key,Value value) {
//先得到對應的hash值
Entry entry = new Entry(key, value);
int hashValue = key.hashCode()%link.length;
LinkedList<Entry> linkedList = new LinkedList<>();
linkedList = link[hashValue];
if(linkedList == null) { //如果這裡直接操作link陣列就會出錯
linkedList = new LinkedList<>();
linkedList.add(entry);
link[hashValue]=linkedList;
}else {
//如果那個地方hashcode值相同的話 那就應該要進行對比這兩個key是不是相等 如果key相等的話 那就將你當前的那個key覆蓋掉,如果不等的話也是直接加
//遍歷連結串列
for(Entry entry1 : linkedList) {
if(entry.key.equals(entry1.key)) { //另外記得這個要是key為一個我們寫的物件的話,要重寫equals()方法
//找到一樣的key的話 那就覆蓋咯
entry1.value = value;
link[hashValue] = linkedList;
return ;
}
}
//否則的話就在該連結串列裡面新增這個hashcode值
linkedList.add(entry);
link[hashValue] = linkedList;
}
}
public Value get(Key key) {
//先得到hash值
int hashValue = key.hashCode()%link.length;
//再從連結串列中去找key與引數key相等的
for(Entry entry : link[hashValue]) {
if(entry.key.equals(key)) {
return entry.value;
}
}
return null;
}
class Entry{
Key key;
Value value;
public Entry(Key key, Value value) {
super();
this.key = key;
this.value = value;
}
}
public static void main(String[] args) {
HashMapForLinkedList<String, Integer> hashMapForLinkedList = new HashMapForLinkedList<>();
hashMapForLinkedList.put("a", 1);
hashMapForLinkedList.put("b", 2);
hashMapForLinkedList.put("a", 3);
System.out.println(hashMapForLinkedList.get("a"));
}
}
//class ArrayHashMap{
//
// Object key;
// Object value;
//
// //建立物件陣列 在陣列中存放對應的值value
// Object[] tables = new Object[998];
//
// public void put (Object key , Object value) {
//
// int keyHash = key.hashCode();
// int index = keyHash % 998;
// tables[index] = value;
// }
//
// public Object get(Object key) {
//
// int index = key.hashCode()%998;
// return tables[index];
// }
//
//}