c#集合类笔记之六 Dictionary Lookup SortedDictionary

字典表示一种非常复杂的数据结构,这种数据结构允许按照某个键来访问元素。字典也称为映射或散列表。字典的主要特性是能根据键快速查找值。也可以自由添加和删除元素,List类,但没有在内存中移动后续元素的性能开销。键会转换为一个散列。利用散列创建一个数字,它将索引和值关联起来。然后索引包含一个到值的链接。
Dictionary<TKey,TValue>键的类型:用作字典中键的类型必须重写Object类的GetHashCode () 方法。只要字典类需要确定元素的位置,它就要调用GetHashCode () 方法。GetHashCode () 方法返回的int由字典用于计算在对应位置放置元素的索引。键类型还必须实现IEquatable.Equals (), 或者Object类的Equals () 方法。因为不同的键对象可能返回相同的散列码,所以字典使用Equals () 方法来比较键。确保如果A. Equals (B) 方法返回true, 则A.GetHashCode() 和B.GetHashCode() 方法必须总是返回相同的散列代码。System.String实现了IEquatabIe接口,并重载了GeHashCode()方法。Equals方法提供了值的比较,GeHashCode()方法根据字符串的值返回一个散列代码。因此,在字典中把字符串用作键非常方便。 数字类型如 Int32,也实现IEquatable接口,并重载GetHashCode()方法。但是这些类型返回的哈希代码只映射到值上。如果希望用作键的数字本身没有分布在可能的整数值范围内,把整数用作键就不能满足键值的平均分布规则,于是不能获得最佳的性能。Int32并不适合在字典中使用。如果需要使用的键类型没有实现IEquatable接口,并根据存储在字典中的键值重载GetHashCode()方法,就可以创建一个实现IEqualityComparer接口的比较器。该接口定义了GetHashCode()和Equals()方法,并将传递的对象作为参数,因此可以提供与对象类型不同的实现方式。Dictionary<TKey,TValue>的构造函数的一个重载版本允许传递一个实现了IEqualityComparer接口的对象。如果把这个对象赋予字典,该类就用于生成散列代码并比较键。Dictionary<TKey,TValue>支持每个键关联一个值。Lookup<TKey,TElement>类非常类似于Dictionary<TKey,TValue>,但把键映射到一个值集上。这个类在程序集system.Core中实现,用system.Linq名称空间定义。Lookup<TKey,TElement>类不能像一般的字典那样创建,而必须调用ToLookup()方法,该方法返回一个Lookup<TKey,TElement>类对象。ToLookup()方法是一个扩展方法,它可以用于实现了IEnumerable接口的所有类。法。这个方法需要一个Func<TSource,TKey>的委托,该类型定义了键的选择器。
SortedDictionary<TKey,TValue>类是一个二叉搜索树,其中的元素根据键来排序.该键类型必须实现IComparable接口.如果键的类型不能排序,则还可以创建一个实现了IComparer接口的比较器,将比较器用作有序字典的构造函数的一个参数.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值