Hashtable的使用

1.桶式哈希实现
功能:将字符串在桶式哈希上哈希,最简单的是将字符串的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]);
        }

    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值