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

基於ArrayList實現HashMap程式碼

package hashMap;

import java.util.ArrayList;
import java.util.List;

/**
 * 基於ArrayList的實現hashMap
 *     效率不高  新增 刪除 查詢 太多迴圈 從頭查到尾  
 * @author 蔣子文
 *
 */
public class HashMapForArrayList <Key,Value>{
    
    
    private List<Entry<Key,Value>> tables = new ArrayList<Entry<Key, Value>>() ;
    
    /*
     * 先判斷這個key是否存在??
     * 如果存在的話就直接講之前的value覆蓋就行 不存在的話就直接新增
     */
    public void put(Key key, Value value) {
        Entry<Key, Value> entry = new Entry<Key, Value>(key, value);
        
        for(Entry<Key, Value> entry2 : tables) {
            if(entry.key.equals(entry2.key)) {
                entry2.value = entry.value;
                return ;
            }
        }
        tables.add(entry);
    }
    
    //通過key返回一個value 還寫得不好 這裡面不應該直接去訪問key 和 value 應該要將這兩個封裝起來 
    public  Value get(Key key) {
        for(Entry<Key, Value> entry : tables) {
            if(entry.key.equals(key)) {
                return entry.value;
            }
        }
        return null;
    }
    
    
    //remove方法
    public void remove(Key key) {
        for(Entry<Key, Value> entry : tables) {
            if(entry.key.equals(key)) {
                tables.remove(entry);
            }
        }
    }
    
    /*
     * 重要的類 entry 主要用於存放Map中的值
     */
    static class Entry<Key , Value>{
        Key key;  
         Value value;  
        
        //構造方法
        public Entry(Key key, Value value) {
            super();
            this.key = key;
            this.value = value;
        }
        
    }
    
    //如果我們新增的元素是一個這樣的物件
     static class User {
        private String name ;
        private int age;
        
        public User(String name, int age) {
            this.age = age;
            this.name = name;
        }
        
        /*
         * 在set集合中常用,在map中不常用
         */
        public boolean equals(User user) {
            if(this.name.equals(user.name) && this.age == user.age)
            return true;
            return false;
        }
    }
    
    public static void main(String[] args) {
        
        HashMapForArrayList<String, User> hashMap = new HashMapForArrayList<String ,User>();
        
        User user1 = new User("jzw", 10);
        User user2 = new User("jzw", 10);
        User user3 = new User("jzw", 20);
        
        hashMap.put("1" , user1);
        hashMap.put("2" , user2);
        hashMap.put("3" , user3);
        
        System.out.println(hashMap.get("1"));
        //System.out.println(hashMap);
        System.out.println(hashMap.get("2"));
        
    }

}