1. 程式人生 > >基於LinkedList實現HashMap程式碼

基於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];
//    }
//    
//}