hashmap实现

hashmap里面有个数组(桶),数组中的保存的是双向链表或者红黑树。

要保存一个值,通过hash函数求出索引,

然后添加到这个链表上,

如果链表过长或者hashmap中的元素过多,会进行扩容或者由链表进化成红黑树。

取出元素也是一样的

通过hash函数,求出索引,找到桶,然后通过key比较对比,找到对应的value。

因为元素数量过多时会对数组进行扩容,所以复杂度是O1

 

二分查找要求元素可以随机访问,所以决定了需要把元素存储在连续内存。这样查找确实很快,但是插入和删除元素的时候,为了保证元素的有序性,就需要大量的移动元素了。

如果需要的是一个能够进行二分查找,又能快速添加和删除元素的数据结构,首先就是二叉查找树,二叉查找树在最坏情况下可能变成一个链表。

于是,就出现了平衡二叉树,根据平衡算法的不同有AVL树,B-Tree,B+Tree,红黑树等,但是AVL树实现起来比较复杂,平衡操作较难理解,这时候就可以用SkipList跳跃表结构。

你可能感兴趣的:(数据结构与算法)