1.桶式哈希实现
功能:将字符串在桶式哈希上哈希,最简单的是将字符串的asc值的和计算hash
2.c#中的Hashtable类,这个类解决hash冲突的思想就是使用桶的思想
如果两个键具有相同的散列代码,那么把他们放置在一个桶中
Hashtable类是System.Collections命名空间中一部分内容,所以必须在程序开始部分导入System.Collections。
功能:将字符串在桶式哈希上哈希,最简单的是将字符串的asc值的和计算hash
using System;
using System.Collections;
using System.Diagnostics;
using System.Text;
public class myhash
{
private int SIZE = 101;
private ArrayList[] data;//数据表
public myhash()
{
data=new ArrayList[SIZE]; //构建这个大小数组
for (int i = 0; i <= data.GetUpperBound(0); i++)
{//构造这个hash表
data[i]=new ArrayList(4); //每个hash表都是四个大小的数组
}
}
public void Hash(string name)
{
char[] cname = name.ToCharArray(); //转换成c数组
int tot=0;
for (int i = 0; i <= cname.GetUpperBound(0); i++) //将字符串转换为asc的和
tot += tot*37 + (int) cname[i];
int hash_value = tot%data.GetUpperBound(0);
//if (data[hash_value].Contains(name))
data[hash_value].Add(name);
}
public void show()
{
for (int i = 0; i <= data.GetUpperBound(0); i++)
{
if (data[i].Count > 0)
{
for (int j = 0; j < data[i].Count; j++)
Console.Write(" " + data[i][j]);
Console.WriteLine();
}
}
}
}
public class Test
{
private static void Main()
{
myhash hash=new myhash();
hash.Hash("jiajai");
hash.Hash("doudouo");
hash.Hash("wanwang");
hash.Hash("jiajai");
hash.Hash("doudouo");
hash.Hash("wanwang");
hash.Hash("jiajai");
hash.Hash("doudouo");
hash.Hash("wanwang");
hash.show();
}
}
2.c#中的Hashtable类,这个类解决hash冲突的思想就是使用桶的思想
如果两个键具有相同的散列代码,那么把他们放置在一个桶中
Hashtable类是System.Collections命名空间中一部分内容,所以必须在程序开始部分导入System.Collections。
using System;
using System.Collections;
using System.Diagnostics;
using System.Text;
public class Test
{
private static void Main()
{
Hashtable symbols=new Hashtable(); //构造哈希表
Hashtable symbols2=new Hashtable(50); //初始容量是50
//Hashtable symbols3=new Hashtable(25,3.0F); //容量为25,负载系数为3
//(4.0中有编译错误)
Hashtable symbols4=new Hashtable(25); //建立hash表
symbols4.Add("salary",1000); //添加hash映射
symbols4.Add("name","David Durr");
symbols4.Add("age",43);
symbols4.Add("dept","Information Technology");
foreach (string val in symbols4.Keys)
{
Console.WriteLine(val+" "+symbols4[val]);
}
Console.WriteLine();
symbols4["age"] = "nihaoa";
foreach (string val in symbols4.Keys)
{
Console.WriteLine(val + " " + symbols4[val]);
}
//其他方法
//1.计算数量
int count = symbols4.Count; //包含的数量
Console.WriteLine("hash表中包含的数据量:"+count);
//2.移除元素
symbols4.Remove("age");
//3.清空元素
Console.WriteLine("清空数据...");
symbols4.Clear();
foreach (string val in symbols4.Keys)
{
Console.WriteLine(val + " " + symbols4[val]);
}
}
}