1. 程式人生 > >HashMap的自定義實現

HashMap的自定義實現

map() obj static void 定義 [] ram OS ava

一、背景:          

HashMap到底是怎麽實現的? 一對一對的存放,通過key找value;map的鍵不能重復;自己怎麽實現呢? 代碼: Wife.java 輔助類 技術分享圖片
package com.cy.collection;

public class Wife {
    String name;
    
    public Wife(String name){
        this.name = name;
    }

    @Override
    public String toString() {
        return "Wife [name=" + name + "]";
    }
}
View Code

Map.java:

package com.cy.collection;

/**
 * 自定義實現Map
 */
public class Map {
    private Entry[] arr = new Entry[1000];    //這裏暫時不考慮擴容
    private int size;                        //這裏都是private的,不暴露size屬性
    
    /**
     * 1.鍵不能重復,如果含有這個鍵,就替換value
     * @param key
     * @param value
     */
    public
void put(Object key, Object value){ for(int i=0; i<size; i++){ if(arr[i].key.equals(key)){ arr[i].value = value; return; } } arr[size++] = new Entry(key, value); } //根據key獲取 public Object get(Object key){
for(int i=0; i<size; i++){ if(arr[i].key.equals(key)){ return arr[i].value; } } return null; } //根據key刪除 public boolean remove(Object key){ boolean success = false; for(int i=0;i<size;i++){ if(arr[i].key.equals(key)){ success = true; remove(i); } } return success; } private void remove(int i){ int numMoved = size - i - 1; if(numMoved>0){ System.arraycopy(arr, i+1, arr, i, numMoved); } arr[--size] = null; //Let gc do its work } //containsKey public boolean containsKey(Object key){ for(int i=0; i<size; i++){ if(arr[i].key.equals(key)){ return true; } } return false; } //containsValue 同containsKey //size public int size(){ return size; } } /** * 用來存放鍵值對的條目 */ class Entry{ Object key; Object value; public Entry(Object key, Object value) { super(); this.key = key; this.value = value; } }

Test.java測試代碼:

技術分享圖片
package com.cy.collection;

public class Test {

    public static void main(String[] args) {
        Map map = new Map();
        map.put("張三", new Wife("abc"));
        map.put("李四", new Wife("def"));
        map.put("王五", new Wife("ghi"));
        System.out.println(map.get("張三"));
        map.remove("李四");
        System.out.println(map.size());
        
        map.put("張三", new Wife("aaa"));
        System.out.println(map.get("張三"));
        System.out.println(map.containsKey("張三"));
    }

}

輸出:
Wife [name=abc]
2
Wife [name=aaa]
true
View Code

HashMap的自定義實現