首页 技术 正文
技术 2022年11月19日
0 收藏 552 点赞 4,495 浏览 2048 个字

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")); }}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:8,955
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,479
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,291
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,108
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,740
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,774