C# Hashtable


一,哈希表(Hashtable)简述
  在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,但排序速度很慢。同时key是区分大小写;value用于存储对应于key的值。Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对.
二,c#中Hashtable用法简述

1.使用hashtable前.需要添加System.Collections的引用

using System.Collections; 

2.添加元素

Hashtable.Add(key,value);// key,value可以是任何类型

如果key有重复会掷出运行时异常,你可以这样处理

if(Hashtable.Contains(key)==false){

Hashtable.Add(key,value);// 不存在则添加

}

也可以这样处理,效率要高些

try{

Hashtable.Add(key,value);

}

catch{

// 不处理重复异常

}

3.删除元素

Hashtable.Remove(key);

4.删除所有

Hashtable.Clear();

5.判断键是否已经存在

Hashtable.Contains(key) // 这个刚才已经用过了

6.遍历

foreach(Object key in Hashtable.Keys){

}

7.遍历值

foreach(Object value in Hashtable.Values){

}

8.同时遍历键值对

foreach(DictionaryEntry de in ht) 
 {
   Console.WriteLine(de.Key);// 取得键

   Console.WriteLine(de.Value);// 取得值

 }

9.排序键输出(对值也是一样处理)

ArrayList arraylist = new ArrayList(Hashtable.Keys);
arraylist.Sort();  

三,示例代码

using System;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace HashtableHelper//命名空间名不可使用类名,如:namespace Hashtable
{
    class HashtableHelper
    {
        private Hashtable list;
        private Hashtable _list
        {
            set { list = value; }
            get { return list; }
        }
        public HashtableHelper()
        {
            list = new Hashtable();
            Console.WriteLine("-----------Hashtable-------------");
        }
        //添加一个键值对
        public void Add(object key, object value)
        {
            Console.WriteLine("向Hashtable中添加键/值对");
            list.Add(key, value);
            Console.WriteLine("加入/t键:{0}/t值:{1}", key, value);
        }
        //移除一个键值对
        public void Remove(object key)
        {
            Console.WriteLine("从Hashtable中移除键/值对");
            list.Remove(key);
            Console.WriteLine("删除/t键:{0}", key);
        }
        //根据键得到一个键值对
        public void GetValue(object key)
        {
            Console.WriteLine("根据键得到一个键值对");
            Console.WriteLine(string.Format("取值/t键{0}的值:{1}", key, list[key]));
        }
        //判断Hashtable中是否含有某一特定键
        public void Contains(object i)
        {
            Console.WriteLine("判断Hashtable中是否含有某一特定键");
            if (list.Contains(i))
            Console.WriteLine("Hashtable中含有键:{0}",i);
            else
            Console.WriteLine("Hashtable中不含有键:{0}", i);

        }
        //遍历键
        public void GetKeys()
        {
            Console.WriteLine("遍历Hashtable键");
            foreach(object de in list.Keys)
            {
                Console.WriteLine("/t键:{0}",de);
            }
        }
        //遍历值
        public void GetValues()
        {
            Console.WriteLine("遍历Hashtable值");
            foreach(object de in list.Values)
            {
                Console.WriteLine("/t值:{0}",de);
            }
        }
        //使用foreach遍历,每一个键/值对是DictionaryEntry类型,注意:逆序遍历
        public void GetKeyValues()
        {
            Console.WriteLine("遍历键/值对");
            foreach (DictionaryEntry de in list)//Dictionary与DictionaryEntry区别
            {
                Console.WriteLine("/t键:{0}/t值:{1}", de.Key, de.Value);//C#严格区分大小写,如de.key,de.value为错误
            }
        }
        //对Hashtable键排序
        public void Sort()
        {
            Console.WriteLine("对Hashtable键进行排序");
            ArrayList hlist = new ArrayList(list.Keys);
            hlist.Sort();
            for (int i = 0; i < hlist.Count;i++ )
            {
                Console.WriteLine("/t键:{0}",hlist[i]);
            }
        }
        //清空Hashtable
        public void Clear()
        {
            Console.WriteLine("清空Hashtable");
            list.Clear();
            Console.WriteLine("清空了Hashtable!");
        }
        //获取Hashtable信息
        public void GetInfo()
        {
            Console.WriteLine("获取Hashtable信息");
            Console.WriteLine(string.Format("信息/t元素总数:{0}", list.Count));
        }
    }
}

 


using System;
using System.Collections.Generic;
using System.Text;

namespace HashtableHelper
{
    class Program
    {
        static void Main(string[] args)
        {
            HashtableHelper htb = new HashtableHelper();
            htb.Add(0,"唐玉芳");
            htb.Add(1,"唐玉芳");
            htb.Add(2,"唐玉芳");
            htb.Add(3,"唐玉芳");
            htb.Add(4,"唐玉芳");
            htb.Add(5,"唐玉芳");
            htb.Add(6,"唐玉芳");
            htb.Add(7,"唐玉芳");
            htb.Add(8,"唐玉芳");
            htb.Add(9,"唐玉芳");
            htb.Add(10,"唐玉芳");
            htb.Add(11,"唐玉芳");
            //htb.Add(0,"唐玉芳");
            htb.GetValue(1);
            htb.GetValue(0);
            htb.GetKeys();
            htb.GetValues();
            Console.WriteLine("对Hashtable键排序开始");
            htb.Sort();
            Console.WriteLine("对Hashtable键排序结束");
            htb.GetValues();
            htb.GetKeyValues();
            htb.Contains(111);
            htb.GetInfo();
            htb.Remove(0);
            htb.Remove(0);
            htb.GetValues();
            htb.GetInfo();
            htb.Clear();
            htb.GetInfo();
        }
    }
}

注意:对哈希表进行排序在这里的定义是对key/value键值对中的key按一定规则重新排列,但是实际上这个定义是不能实现的,因为我们无法直接在Hashtable进行对key进行重新排列,如果需要Hashtable提供某种规则的输出,可以采用上述变通的做法。


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值