数据结构(二)

HashTable哈希表:

        根据关键的key来实现快速寻找寻找value的数据结构。

        哈希表会存在一个哈希冲突问题,那就是当你用hash函数作用在两个互不相同的key上,得到的value值相等。这就好比“一个班里面有两个叫做李洋的同学,老师上课的时候叫到李洋起来回答问题,这时就不知道是哪个李洋起来回答问题。”

        因此会有避免冲突和解决冲突两种办法。

        避免冲突的一个办法就是尽可能的选择合适的哈希函数。

        解决方法通常采用开放寻址法,其中包括线性探查,二次探查和二度哈希。

        哈希表还有三个常问数值,8,16,0.75.

        8是由于哈希表是由数组+红黑树的组合作为底层结构,在长度大于8的时候使用红黑树储存。16是哈希表默认的长度,0.75则是哈希表的加载因子,加载因子这个知识点可以结合动态数组来理解,大致原理就是哈希表生成后,默认长度为16,当它到达16的0.75倍时(即12),要继续加入新数据的话,哈希表会自行动态扩充一倍,变为32。

Dictionary<K,T>字典:

        也是工作中常用的存储数据的数据结构,他和哈希表的差别就如同ArrayList和List<T>的区别,它使用强类型来限制Key和Value,创建字典类型时必须指定Key和Value的类型,且字典还采用了不同的冲突解决策略,称为链接技术,哈希表使用的二度哈希,将导致所有哈希重新计算,而链接技术将采用额外的数据结构来处理,字典中的每个位置都映射到了一个链表,当发生冲突时,冲突的元素将被添加到桶列表中。

        而字典的缺点就是空间,以空间换时间,通过更多的内存开销来满足对速度的追求。

数据结构总结:

        数组部分:Array、ArrayList、List<T>。当元素的数量是固定的,并且需要使用下标时使用。

        链表:LinkedList<T>。当元素需要能够在列表两端添加时使用。

        队列和栈:Queue<T>、Stack<T>。使用情景为需要实现先进先出时,使用队列。需要实现先进后出时,使用栈。

        哈希表和字典:Hashtable、Dictionary<K,T>。使用情景为当需要使用键值对来快速添加和查找,并且元素没有特定的顺序的时候。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值