Mahout-HashMap的进化版FastByIdMap

原创 2015年07月07日 20:20:53

FastByIdMap是基于散列的,在处理冲突时是线性探测而非分离链接,这样就不必为每一个条目增加一个Map.Entry对象,从而节省内存开销。
下面代码是一个线性探测Map的Demo:

package com.example.mahout;

public class ArrayHashST_Linear_Probing<Key, Val> {
    private int M = 30001;
    private Key[] keys = (Key[]) new Object[M];
    private Val[] vals = (Val[]) new Object[M];

    private int hash(Key key) {
        return (key.hashCode() & 0x7fffffff) % M;
    }

    public void put(Key key, Val val) {
        int i;
        for (i = hash(key); keys[i] != null; i = (i + 1) % M)
            if (keys[i].equals(key))
                break;
        keys[i] = key;
        vals[i] = val;
    }

    public Val get(Key key) {
        int i;
        for (i = hash(key); keys[i] != null; i = (i + 1) % M)
            if (keys[i].equals(key))
                break;
        return vals[i];
    }

    public static void main(String[] args) {

        ArrayHashST_Linear_Probing<String,String> st = new ArrayHashST_Linear_Probing<String, String>();
        st.put("jocularly", "jocularly");
        st.put("seriously", "seriously");
        st.put("listen", "listen");
        st.put("suburban", "suburban");
        st.put("untravelled", "untravelled");
        st.put("considerating", "considerating");
        st.put("browsing","browsing");
        System.out.println(st.get("jocularly"));




    }

}

这个是分离链接的Demo:

package com.example.mahout;

public class ListHashST_Separate_Chaining<Key, Value> {
    private int M = 8191;
    private Node[] st = new Node[M];

    private static class Node {
        Object key;
        Object val;
        Node next;

        Node(Object key, Object val, Node next) {
            this.key = key;
            this.val = val;
            this.next = next;
        }
    }

    private int hash(Key key) {
        return (key.hashCode() & 0x7fffffff) % M;
    }

    public void put(Key key, Value val) {
        int i = hash(key);
        for (Node x = st[i]; x != null; x = x.next) {
            if (key.equals(x.key)) {
                x.val = val;
                return;
            }
        }
        st[i] = new Node(key, val, st[i]);
    }

    public Value get(Key key) {
        int i = hash(key);
        //System.out.println(i);
        for (Node x = st[i]; x != null; x = x.next){
            System.out.println(x.val);
            if (key.equals(x.key))
                return (Value) x.val;

        }

        return null;
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        ListHashST_Separate_Chaining<String, String> st =  new ListHashST_Separate_Chaining<String, String>();
        st.put("jocularly", "jocularly");
        st.put("seriously", "seriously");
        st.put("listen", "listen");
        st.put("suburban", "suburban");
        st.put("untravelled", "untravelled");
        st.put("considerating", "considerating");
        st.put("browsing","browsing");
        st.get("jocularly");
        //System.out.println(st.get("jocularly"));


    }

}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

进化版驱动精灵

  • 2013-03-08 14:54
  • 17.89MB
  • 下载

从零开始学Swift之Hello World进化版

上节课,也就是昨晚啦,我们学习到从零开始学Swift之Hello World,那一节只有一句代码,大家会觉得不够过瘾。那么这节课,就给大家来多点瘾货吧! 先上图!   //var 代表变量...

iOS 网易新闻首页进化版Demo(MXSegmentedPager),自带平行头部拉伸

网易新闻首页类似的界面简直太常见了,需求不同自然做出来的效果不同了,之前 用ScrollView写过一个控制器的封装,但是这里根本没有考虑到控制器的复用以及预加 载机制,如果没考虑复用的话当界面爆炸的...

LaTeX半小时速成究极进化版(修改版)

唔~~~今年期末考得还凑合~~~今年寒假过得也还凑合(某只昂昂昂,你知道我zhai说你~~~)~~~又看到有人在转一些关于LaTeX的东东,觉得网上给的模板要不只适用于英文论文(维基百科上面对于一些数...

线段相交进化版

description 欧巴马有n根长度不同的木棒,他喜欢把这些木棒任意的丢在地板上来玩耍。因为木棒都是随意丢在地板上的,难免会些木棒相交, 对于那些相交的木棒,他们就有了上下之分,后来...

hibernate动态数据库进化版

hibernate动态数据库

题目1030:毕业bg 进化版01背包

暂时只想到用效率较低的递归方法解决吗,还好测试数据有点弱,没超时,哈哈。 刚开始总是WA,纠结了很久,才发现应先按离开的时间排下序。 每年毕业的季节都会有大量毕业生发起狂欢,好朋友们相约吃...

CE5.5魔鬼作坊进化版

  • 2011-08-26 08:41
  • 5.19MB
  • 下载

极限学习机 进化版

  • 2013-12-05 16:48
  • 470KB
  • 下载

进化计算(C#版)「安德鲁·基里洛夫 著,野比 译」

© Andrew Kirillov 2006, 野比 2012 作者简介:  安德鲁·基里洛夫是一名高级软件工程师。安德鲁是著名的图像、数学、神经网络编程框架AForge.NET的作者。 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)