关于数据结构底层原理的面试题

问题1 HashMap底层实现原理

哈希表底层采用数组+链表结合的方式实现,对于每一个key值,内部采用任意哈希算法根据key值计算出一个整数,然后对数组的长度求余,求余后的结果即为内部数组中的index值。
如果某两个key对应的哈希值对数组求余得到的结果相同,或者两个key对应的哈希值也是相同的,则发生哈希冲突,哈希表会在某个index对应的结构体中使用链表来储存所有index相同的数据,俗称拉链法。
链表长度过长时,内部会将链表转化为红黑树结构,或者扩充来减少哈希冲突。

问题2 List底层实现原理

list被称为动态数组,其内部就是一个数组实现的。这个数组的长度要比实际数据的长度大,如果容纳不下时就会发生扩容。每次添加/删除数据都会导致数组索引需要重新排序,所以List的优缺点和数组基本相同,查找效率很高,添加/删除数据效率低。
LinkedList则相反,底层由双向链表实现,随机访问效率低,添加/删除效率高。

问题3 List的sort函数使用哪种排序方法

list内部存在一个变量记录当前数据是有序还是无序。
如果有序:则数据长度小于7时使用插入排序。长度大于等于7时使用归并排序。
如果无序:则将数据分割为长度小于等于32的区块,对每个区块进行二叉树排序,之后再对每个区块进行归并排序。
C#list排序原理

问题4 lua中table的sort函数使用哪种排序方法

table使用的是快速排序。

你可能感兴趣的:(未分类)