C#中哈希表(Hashtable)简单用法

1.哈希表简述

哈希表是种数据结构,它可以提供快速的插入操作和查找操作。第一次接触哈希表时,它的优点多得让人难以置信。不论哈希表中有多少数据,插入和删除(有时包括侧除)只需要接近常量的时间即0(1)的时间级。哈希表也有一些缺点它是基于数组的,数组创建后难于扩展某些哈希表被基本填满时,性能下降得非常严重,所以程序虽必须要清楚表中将要存储多少数据(或者准备好定期地把数据转移到更大的哈希表中,这是个费时的过程。

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

2.哈希表用法

1)命名空间

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

2)基本操作

//添加一个keyvalue键值对:
HashtableObject.Add(key,value);

//移除某个keyvalue键值对:
HashtableObject.Remove(key);

//移除所有元素:           
HashtableObject.Clear(); 

// 判断是否包含特定键key:
HashtableObject.Contains(key);

3)例子

            Hashtable ht = new Hashtable();
            ht.Add("1706010315", "小张");
            ht.Add("1706010316", "小王");
            ht.Add("1706010317", "小李");
            ht.Add("1706010318", "小红");

            string mate = (string)ht["1706010315"]; //根据键值取元素
            bool exist = ht.Contains("1706010316"); //哈希表中是否含有特定键
            ht.Remove("1706010315"); //移除一个
            ht.Clear(); //移除全部            

4)类型转换

            ht.Add("1806010712", "小强");
            //能转换成功
            string value = ht["1806010712"] as string;
            if (value != null)
            {
                Console.WriteLine(value);
            }
            //不能转换成功 获取的值变为null
            StreamReader reader = ht["1806010712"] as StreamReader;
            if (reader == null)
            {
                Console.WriteLine("小强不是streamread型");
            }
            //先获取object型 再做判断
            Object value2 = ht["1806010712"];
            if(value2 is string)
            {
                Console.WriteLine("这个是字符串型");
            }    

5)遍历

            //遍历哈希表
            foreach(DictionaryEntry de in ht)
            {
                Console.WriteLine(de.Key);
                Console.WriteLine(de.Value);
            }
            //遍历键
            foreach(string key in ht.Keys)
            {
                Console.WriteLine(key);
            }
            //遍历值
            foreach(string value3 in ht.Values)
            {
                Console.WriteLine(value3);
            }
    

6)排序

ArrayList akeys=new ArrayList(ht.Keys); 
akeys.Sort(); //按字母顺序进行排序
foreach(string key in akeys)
{
   Console.WriteLine(key + ": " + ht[key]);  //排序后输出
}

 

posted @ 2019-11-06 15:31  An_Wen  阅读(4459)  评论(0编辑  收藏  举报