Dictionary,hashtable, stl:map有什么异同?

Dictionary,hashtable, stl:map有什么异同?

 

相同点:字典和map都是泛型,而hashtable不是泛型。

不同点:三者算法都不相同

Hashtable,看名字能想到,它是采用传统的哈希算法:探测散列算法,而字典则采用的是散列拉链算法,效率较高,空间也小。Stl:map使用的是红黑树算法,效率最低为o(nlogn)

 

这里要注意的是 dictionary使用的是拉链式哈希算法,在算法内部要对KEY进行哈希计算,即 comparer.GetHashCode(object o),就是说在C#中以值类型作KEY时(整形除外)都会发生装箱操作,

如以enumkey,是C#中造成GC ALLOC的典型原因。

注意数值类型(int, float, double等)int型作dictionarykey不会有GC ALLOC,这是因为c#有一个对应的重载,如comparer.GetHashCode(int key)的重载。

而其它类型则没有对应重载,自定义类型当然不会有对应重载了。

posted on 2018-09-06 19:57 时空观察者9号 阅读(...) 评论(...) 编辑 收藏

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值