Monday, January 11, 2016

Design a Hash Table



https://hellohell.gitbooks.io/-shuati/content/design_a_hash_table.html
//需要创建一个Cell类用来追踪original key  
//1. 实现hash function  
//2. 实现put(key, value)  
//3. 实现get(key)  
public class Hash<K, V>{  
    LinkedList<Cell<K, V>>[] items;  

    public Hash(){  
        items = new LinkedList<Cell<K, V>>[10];  
    }      

    //实现hash function  
    public int hashFunction(K key){  
        return key.toString().length() % items.length;  
    }  

    //实现put方法  
    public void put(K key, V value){  
        int hashedKey = hashFunction(key);  

        //如果没有这个key就新建一个linked list  
        if(items[hashedKey]==null){  
            items[hashedKey] = new LinkedList<Cell<K, V>>();  
        }  

        LinkedList<Cell<K, V>> collided = items[hashedKey];  

        for(Cell<K, V> c : collided){  
            if(c.equivalent(key)){  
                collided.remove(c);  
                break;  
            }  
        }  

        Cell<K, V> cell = new Cell<K, V>(key, value);  
        collided.add(cell);  
    }  

    //实现get方法   
    public V get(K key){  
        int hashedKey = hashFunction(key);  

        if(items[hashedKey]==null){  
            return null;  
        }  

        LinkedList<Cell<K, V>> collided = items[hashedKey];  

        for(Cell<K, V> c: collided){  
            if(c.equivalent(key)){  
                return c.getValue();  
            }  
        }  
        return null;  
    }  
}  

//我们需要一个Cell类来追踪original key  
public class Cell<K, V>{  
    K key;  
    V value;  

    public Cell(K k, V v){  
        key = k;  
        value = v;  
    }  

    public K getKey(){  
        return key;      
    }  

    public V getValue(){  
        return value;  
    }  

    public boolean equivalent(K key){  
        if(this.getKey() == key){  
            return true;  
        }  
        return false;  
    }  
}

Labels

Review (572) System Design (334) System Design - Review (198) Java (189) Coding (75) Interview-System Design (65) Interview (63) Book Notes (59) Coding - Review (59) to-do (45) Linux (43) Knowledge (39) Interview-Java (35) Knowledge - Review (32) Database (31) Design Patterns (31) Big Data (29) Product Architecture (28) MultiThread (27) Soft Skills (27) Concurrency (26) Cracking Code Interview (26) Miscs (25) Distributed (24) OOD Design (24) Google (23) Career (22) Interview - Review (21) Java - Code (21) Operating System (21) Interview Q&A (20) System Design - Practice (20) Tips (19) Algorithm (17) Company - Facebook (17) Security (17) How to Ace Interview (16) Brain Teaser (14) Linux - Shell (14) Redis (14) Testing (14) Tools (14) Code Quality (13) Search (13) Spark (13) Spring (13) Company - LinkedIn (12) How to (12) Interview-Database (12) Interview-Operating System (12) Solr (12) Architecture Principles (11) Resource (10) Amazon (9) Cache (9) Git (9) Interview - MultiThread (9) Scalability (9) Trouble Shooting (9) Web Dev (9) Architecture Model (8) Better Programmer (8) Cassandra (8) Company - Uber (8) Java67 (8) Math (8) OO Design principles (8) SOLID (8) Design (7) Interview Corner (7) JVM (7) Java Basics (7) Kafka (7) Mac (7) Machine Learning (7) NoSQL (7) C++ (6) Chrome (6) File System (6) Highscalability (6) How to Better (6) Network (6) Restful (6) CareerCup (5) Code Review (5) Hash (5) How to Interview (5) JDK Source Code (5) JavaScript (5) Leetcode (5) Must Known (5) Python (5)

Popular Posts