ChainingHash
public class ChainingHash<Key,Value>{
private int N;
private int M;
private doublylinked<Key,Value>[] s;
public ChainingHash(int M){
this.M = M;
s = new doublylinked [M];
for(int i=0;i<M;i++){
s[i] = new doublylinked();
}
}
public int hash(Key key){
return (key.hashCode() & 0x7fffffff)%M;
}
private void put(Key key,Value val){
s[hash(key)].put(key, val);
}
private Value get(Key key){
return s[hash(key)].get(key);
}
private void delet(Key key){
s[hash(key)].delet(key);
}
public void print(){
for (int i = 0;i<M;i++){
s[i].print();
System.out.println(" ");
}
}
public class doublylinked<Key,Value>{
private Node first;
public doublylinked(){
first = null;
}
private class Node{
Key key;
Value val;
Node next,last;
public Node(Key key,Value val,Node next,Node last){
this.key = key;this.val = val;this.next = next; this.last = last;
}
}
public void put(Key key,Value val){
for(Node x = first;x!= null;x= x.next){
if(key.equals(x.key)){
x.val = val;
return;
}
}
if(first == null){
first = new Node(key,val,null,null);
}
else{
first.last = new Node(key,val,first,null);
first = first.last;
}
}
public Value get(Key key){
for(Node x = first;x!= null;x= x.next){
if(key.equals(x.key)){
return x.val;
}
}
return null;
}
public void delet(Key key){
for(Node x = first;x!= null;x= x.next){
if(key.equals(x.key)){
x.last.next = x.next;
return;
}
}
return;
}
public void print(){
int i = 0;
if(first == null){
System.out.println(" ");
return;
}
for(Node x = first;x!= null;x= x.next){
i++;
System.out.println(x.key+" "+x.val );
}
}
}
public static void main(String[] args) {
ChainingHash<String, Integer> st = new ChainingHash<String, Integer>(517);
int N = args.length;
for (int i = 0;i < N; i++) {
String key = args[i];
st.put(key, i);
}
// print keys
st.print();
}
}
ChainingHash的更多相关文章
随机推荐
- java动态代理机制
首先了解代理设计模式,其思想是为其他对象提供一种代理以控制对这个对象的访问. java动态代理就是遵循这种思想,spring中的AOP实现原理就是java的动态代理. 在java的动态代理机制中,有两 ...
- MySQL5.6复制技术(2)-主从部署以及半同步配置详细过程
当前环境规划 主机名称 ec2t-pgtest-01 ec2t-pgtest-02 IP地址 10.189.102.118 10.189.100.195 角色 master slave 系统版本 Ce ...
- 二十、MVC的WEB框架(Spring MVC)
一.Spring MVC 运行原理:客户端请求提交到DispatcherServlet,由DispatcherServlet控制器查询HandlerMapping,找到并分发到指定的Controlle ...
- Ubuntu 系统优化(不定时更新)
系统美化 1. 为Ubuntu安装Numix主题和图标 sudo add-apt-repository ppa:numix/ppa sudo apt-get update sudo apt-get i ...
- java反序列化漏洞原理研习
零.Java反序列化漏洞 java的安全问题首屈一指的就是反序列化漏洞,可以执行命令啊,甚至直接getshell,所以趁着这个假期好好研究一下java的反序列化漏洞.另外呢,组里多位大佬对反序列化漏洞 ...
- Lamda 表达式里的Join和GroupJoin的区别, 如何实现SQL的Left Join效果
例如,可以将产品表与产品类别表相联接,得到产品名称和与其相对应的类别名称 db.Products .Join ( db.Categories, p => p.CategoryID, c => ...
- matlab plot line settings
- laravel获取当前的url以及当前的基础域名方法汇总
原文地址:https://phpartisan.cn/news/58.html 来源于:laravel获取当前的url以及当前的基础域名方法汇总 - Laravel学习网 laravel中我们常常需要 ...
- 2.python函数编程-filter函数
fileter功能主要使用在需要对数据进行多种操作,并对数据进行过滤的操作. 普通函数实现: movie = ['sb_alex', 'wupei', 'tiger', 'goosb','xxfd', ...
- 联想E431 安装ubuntu16.04
http://jingyan.baidu.com/article/3c48dd348bc005e10be358eb.html 按照这个教程安装成功!!