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的更多相关文章

随机推荐

  1. MVC实战之排球计分(二)—— 构架概要设计

    本程序主要基于MVC4框架,使应用程序的输入,处理和输出强制性分开,使得软件可维护性,可扩展性,灵活性以及封装性得到提高, MVC应用程序分为三个核心部件:Model,View, Controller ...

  2. 学习Spring Security OAuth认证(一)-授权码模式

    一.环境 spring boot+spring security+idea+maven+mybatis 主要是spring security 二.依赖 <dependency> <g ...

  3. IQueryable 与 IEnumberable 接口的区别

    IQueryable 与 IEnumberable 接口的区别是: IEnumberable<T> 泛型类在调用自己的 SKip 和 Take 等扩展方法之前数据就已经加载在本地内存里了, ...

  4. thinkphp 3.2 加载第三方库 第三方命名空间库

    tp 自动加载的介绍: http://document.thinkphp.cn/manual_3_2.html#autoload 第三方库不规范库 不适用命名空间的库 可以使用import函数导入,其 ...

  5. 苹果手机 disabled 的背景颜色没有

    解决方案 .class disabled{ background-color: rgb(235, 235, 228); opacity:1}

  6. Sql server中如何将表A和表B的数据合并(乘积方式)

    sql server中如何将表A 和表B的数据合并成乘积方式,也就是说表A有2条数据,表B有3条数据,乘积后有6条数据, 这就要用到sql中的笛卡尔积方式了 1.什么是笛卡尔积 笛卡尔积在SQL中的实 ...

  7. install the Mondo Rescue utility in Ubuntu 12.04 or 12.10.

      1. Open a terminal window. 2. Type in the following commands, then hit Enter after each.   wget ft ...

  8. [转载] C++ STL中判断list为空,size()==0和empty()有什么区别

    关于两个的区别,首先size()==0为bool表达式,empty()为函数调用,这一点很明显.查看源代码, bool empty() const { return _M_node->_M_ne ...

  9. 【Oracle安装卸载】oracle卸载

    Oracle卸载比较麻烦,不能简单卸载就完成了,有时没有卸载完整,下次安装不能很好的安装: 当然Oracle卸载也没有那么难,只是步骤比较多.Oracle10g还是Oracle11g卸载步骤都是一样的 ...

  10. [转载]Java创建WebService服务及客户端实现

    Java创建WebService服务及客户端实现 Java创建WebService服务及客户端实现