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"));


    }

}

hashmap冲突的解决方法以及原理分析

在Java编程语言中,最基本的结构就是两种,一种是数组,一种是模拟指针(引用),所有的数据结构都可以用这两个基本结构构造,HashMap也一样。当程序试图将多个 key-value 放入 HashMa...
  • abcd1430
  • abcd1430
  • 2016年10月06日 19:23
  • 6941

使用Mahout搭建推荐系统之入门篇4-Mahout实战

原始地址:http://my.oschina.net/Cfreedom/blog/201828 目录[-] 一、基本内容 二、运行环境 三、程序运行 3.1 调整...
  • u010685891
  • u010685891
  • 2015年12月17日 11:05
  • 1126

HashMap解决hash冲突的方法

原文地址: http://xiaolu123456.iteye.com/blog/1485349 写的不错,记录下。 在Java编程语言中,最基本的结构就是两种,一种是数组,一种是模拟指针(引...
  • subuser
  • subuser
  • 2015年08月01日 18:22
  • 5518

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

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

进化版驱动精灵

  • 2013年03月08日 14:54
  • 17.89MB
  • 下载

hibernate动态数据库进化版

hibernate动态数据库
  • HelloJava1234
  • HelloJava1234
  • 2013年08月13日 15:55
  • 1527

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

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

利用条件GANs的pix2pix进化版:高分辨率图像合成和语义操作 | PaperDaily #23

在碎片化阅读充斥眼球的时代,越来越少的人会去关注每篇论文背后的探索和思考。 在这个栏目里,你会快速 get 每篇精选论文的亮点和痛点,时刻紧跟 AI 前沿成果。 ...
  • c9Yv2cf9I06K2A9E
  • c9Yv2cf9I06K2A9E
  • 2017年12月07日 00:00
  • 281

线段相交进化版

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

java实现金字塔(进化版)

  • 2008年11月07日 12:35
  • 720B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Mahout-HashMap的进化版FastByIdMap
举报原因:
原因补充:

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