哈希表:非泛型的有Hashtable,泛型的有Dictionary<T,D> java里叫MAP,C#里叫HashTable,讲的都是同样的数据结构关于Hashtable与Dictionary性能的讨论
我个人是觉得,最好使用Dictionary<K,V>,理由如下:
1、Dic是类型安全的,这有助于我们写出更健壮更具可读性的代码,而且省却我们强制转化的麻烦。 2、Dic是泛行的,当K或V是值类型时,其速度远远超过Hashtable。这个大家对值类型与引用类型有所了解的话也会明白。 在System.Collections.Generic命名空间中,与ArrayList相对应的泛型集合是List<T>,
与HashTable相对应的泛型集合是Dictionary<K,V>
Dictionary<K,V>和HashTable的相同点:添加元素,删除元素,通过键访问值的方法相同。
Dictionary<K,V>和HashTable的不同点: Dictionary<K,V>对添加的元素具有类型约束,HashTable可添加任意类型的元素。 Dictionary<K,V>不需要装箱、拆箱操作,HashTable添加时装箱,读取时拆箱。
在Dictionary<K,V>集合中,除了通过键获取值的方法外,还有一种TryGetValue(key)方法,可以通过键获取值,该方法返回值为布尔型,如果存在和键相对应的值,则返回true,否则返回false。避免了因获取不到相应值发生的异常。
using System; using System.Collections.Generic; class Program { static void Main() { //创建Dictionary<K,V>,然后添加元素 Dictionary < string, string > film = new Dictionary < string, string > (); film.Add("韦小宝", "鹿鼎记"); film.Add("陆小凤", "陆小凤传奇"); film.Add("张无忌", "倚天屠龙记"); film.Add("杨过", "神雕侠侣"); film.Add("令狐冲", "笑傲江湖"); Console.WriteLine("集合现在的元素个数为{0}", film.Count); film.Remove("杨过"); //遍历集合 Console.WriteLine("武侠电影的主角及电影名"); Console.WriteLine("/t主角/t电影"); foreach (KeyValuePair < string, string > kvp in film) { Console.WriteLine("/t{0}/t{1}", kvp.Key, kvp.Value); } //检查元素是否存在,如不存在,添加 if (!film.ContainsKey("段誉")) { film.Add("段誉", "天龙八部"); } //获取键的集合 Dictionary < string, string > .KeyCollection keys = film.Keys; //遍历键的集合 Console.WriteLine("受欢迎的武侠片中主角名"); foreach (string str in keys) { Console.WriteLine(str); } Dictionary < string, string > .ValueCollection values = film.Values; //遍历值的集合 Console.WriteLine("最受欢迎的武侠片"); foreach (string strfilm in values) { Console.WriteLine(strfilm); } //遍历元素的另一种方法 Console.WriteLine("和哈希表相同的遍历元素方法"); foreach (string strname in film.Values) { Console.WriteLine(strname); } //获取键对应的值 string myfilm = film["令狐冲"]; Console.WriteLine("主角为令狐冲的电影名{0}", myfilm); //获取键对应值的TryGetValue方法 string objfilm = string.Empty; if (film.TryGetValue("段誉", out objfilm)) { Console.WriteLine("主角为段誉的电影是{0}", objfilm); } else Console.WriteLine("没有主角为段誉的电影"); Console.ReadKey(); } }
HashTable、Map、Dictionar的区别
最新推荐文章于 2020-10-18 23:06:40 发布