码迷,mamicode.com
首页 > 其他好文 > 详细

算法6-2:解决哈系冲突之独立链表

时间:2014-06-14 10:04:26      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:链表   哈希函数   算法   

独立链表是解决哈希冲突的一种办法。它的基本思想就是将哈希值相互冲突的几个对象放到一个链表中。


代码

public class HashST<Key, Value> {
    private static class Node {
        Object key; // 由于无法创建泛型数组,只能将对象设置为Object类
        Object value;
        Node next;
 
        public Node(Object key, Object value, Node next) {
            this.key = key;
            this.value = value;
            this.next = next;
        }
    }
 
    private Node[] map;
    private static final int M = 97;
 
    public HashST() {
        map = new Node[M];
    }
 
    public Value get(Key key) {
        int hash = hash(key);
        Node node = map[hash];
        while(node != null) {
            if(key.equals(node.key)) {
                return (Value) node.value;
            }
            node = node.next;
        }
 
        // 没有找到
        return null;
    }
 
    public void put(Key key, Value value) {
        int hash = hash(key);
        Node node = map[hash];
        while(node != null) {
            if(key.equals(node.key)) {
                node.value = value;
                return;
            }
        }
        map[hash] = new Node(key, value, node);
    }
 
    private int hash(Key key) {
        return (key.hashCode() & 0x7fffffff) % M;
    }
}


性能

性能和M有关,M就是链表的数量。如果M过大,那么内存中就会有很多空的链表,如果M太小,那么每条链表就会很长,造成性能变差。所以,M一般取N/5,N就是关键字的数量。


算法6-2:解决哈系冲突之独立链表,布布扣,bubuko.com

算法6-2:解决哈系冲突之独立链表

标签:链表   哈希函数   算法   

原文地址:http://blog.csdn.net/caipeichao2/article/details/30519529

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!