首页 > 代码库 > 集合中常用算法总结

集合中常用算法总结

1,冲突链表

冲突链表主要用于HashMap,HashTable中,内部采用数组保存链表,链表内部是单向链接,插入的时候会采用头部插入法,

插入的链表包裹数据都是无序的,由于容量的增加,会导致整个数据的重新HASH,所以,两次循环同一个HASH链表,可以得到不同的顺序。

内部实现难点是根据KEY的HASH值获取Bucket

技术分享

 

 

2,双向链表

双向链表相对于数组其在插入上的操作少了,数组为了更改下标,需要移动后面所有的数组,而双向链表只需要更改两个引用就可以达到相同的效果,所有插入的效率远远高于数组

技术分享

 

 

3,红黑树

JAVA数组内部采用一种近视平衡二叉树,红黑树来实现。红黑树有比绝对平衡树更高的插入效率,因为不需要保证绝对的平衡。

红黑树是一种近似平衡的二叉查找树,它能够确保任何一个节点的左右子树的高度差不会超过二者中较低那个的一陪。具体来说,红黑树是满足如下条件的二叉查找树(binary search tree):

  1. 每个节点要么是红色,要么是黑色。
  2. 根节点必须是黑色
  3. 红色节点不能连续(也即是,红色节点的孩子和父亲都不能是红色)。
  4. 对于每个节点,从该点至null(树尾端)的任何路径,都含有相同个数的黑色节点。

红黑树的难点是左旋和右旋

 

 技术分享

技术分享

 

4,循环数组

循环数组内部采用数组实现,只是增加头和尾的实现,用来实现栈和队列的机制。其内部实现效率高于双向链表实现的栈和队列。

技术分享

 

集合中常用算法总结