当前位置: 代码迷 >> 综合 >> 集合(2)——Dictionary字典(1)——Dictionary(字典)→ Hashtable等集合类
  详细解决方案

集合(2)——Dictionary字典(1)——Dictionary(字典)→ Hashtable等集合类

热度:54   发布时间:2023-10-02 01:07:04.0

一、Dictionary(字典)→ Hashtable

1、Key-value Pair 键值对。成语不可以重复,但是解释可以重复。

2、Dictionary<K,V>:     K即Key是键,V即value是值。

(1)Add:添加,如果重复,则报错。

(2)索引器方式设置值:可以重复设置,即使不存在也没关系,如果重复则新数据覆盖旧数据

(3)ContainsKey,判断是否存在这个Key

 

3、(常考)Dictionary<K,V>的非泛型对应的是Hashtable;List<T>——>ArrayList

4、Hashtable和Dictionary的关系,类似于ArrayList和List的关系

(1)List是一个泛型的ArrayList。Dictionary可以看作是一个泛型的Hashtable

(2)Hashtable很少用,所以只要掌握了Dictionary就差不多可以了。

 

5、举个例子:

 string s = "Welcome to Chinaworld";Dictionary<char, int> dict = new Dictionary<char, int>();//key为字符,value为出现的次数foreach (char ch in s.ToLower()){if (dict.ContainsKey(ch))//如果dict中含有这个字符就在出现次数上增加1{//dict[ch]++;dict[ch] = dict[ch] + 1;}else{dict[ch] = 1;//如果不存在就初始化为1}}foreach (char ch in dict.Keys){Console.WriteLine("{0}出现{1}次",ch,dict[ch]);}

二、Dictionary揭秘

6、ASP.NET 程序员天天要打交道的 Application、Cache、Session、Request.Params等均由 Dictionary /Hashtable 实现。数据库中的索引也是相似的原理。

7、Dictionary为什么速度这么快

8、查字典为什么能这么快?目录中记录了每个汉字的页码,查找的时候先看汉字的页码,再翻到指定的页就可以非常快速的找到词条了。

9、Dictionary中有一个存储键值对的区域,采用一个固定算法(散列算法,非常快,可以认为时间复杂度为O(1) )根据key来计算这个kvp存放的地址,计算key的值的键值对应该存储的地址,将键值对放入指定的地址即可。查找的时候首先计算key的地址,就可以找到数据了。根据key找房间号,而不是逐个房间找

三、其他集合类

10、HashSet<T>:不能盛放重复的数据重复的数据只保留一份。Add(T value)添加元素;Contains(T value)判断是否存在元素HashSet使用了和Dictionary类似的算法,因此Contains方法效率非常高,时间复杂度为O(1)

11、面试题:取出整数数组中不重复数据的个数,{30,31,99,38,31,99,50}。

12、面试题:现有1~10共10个整数,已随机放入一个有8个元素的数组a[8]。要求找出没有被放入数组的那2个数。注意:程序不用实现自然数随机放入数组的过程,测试数据{9,8,5,3,1,10,2,7}。

13、Stack<T>,栈,先入后出,Push(压栈)、Pop(出栈)。

14、Queue<T>,队列,先入先出:Enqueue(入队)、Dequeue(出队)。

  相关解决方案