首页 > 其他 > 详细

HashSet和TreeSet的实现与原理

时间:2019-10-17 22:55:16      阅读:65      评论:0      收藏:0      [点我收藏+]

HashSet和TreeSet有什么区别呢?

  他们的区别主要在他们底层的数据结构不同。HashSet使用的HashMap来实现的,而TreeSet使用的TreeMap来实现的。

HashMap和TreeMap的区别呢?

  HashMap是一个最常用的数据结构,它主要用于我们又通过固定值(key)获取内容的场景,时间复杂度可以最快优化到O(1),当然效果不好的时候时间复杂度是O(logN)或者O(n)。虽然固定值查找提高了速度,但是HashMap不能保证固定值,也就是key的顺序,所以这个时候TreppMap就出现了,虽然它的查找、删除、更新的时间复杂度都是O(logN),但是它保证了key的有序性。

HashMap和TreeMap的底层实现有什么不同呢?

   HashMap使用的是数组和哈希的方式实现,巧妙通过可以的哈希路由到每个数组用于存放内容,这时候通过key获取value的时间复杂度就是O(1),当然因为key的哈希可能碰撞,所以就需要针对碰撞的时候做处理,HashMap里面每一个数组里面存的其实是一个链表,key的哈希冲突以后会追加到链表上面,这个时候再通过key获取value的时候时间复杂度就是O(n),那么碰撞越多的时候查询是不是会变得很慢呢?最后为了优化这个时间复杂度,HashMap当一个key碰撞次数超过treeify threshold的时候就会把链表转化成红黑树,这样虽然插入的时候也增加了时间复杂度变成了O(logN),说到红黑树就把HashMap和TreeMap联系到一起了,因为TreeMap的底层实现就是红黑树。

那为什么用红黑树而不用二叉搜索树呢?

  二叉搜索树是左子树的值小于根节点,右子树的值大于根节点,如果构建根节点以后插入的数据是有序的,那么构造出来的二叉搜索树就不是平衡树,二十一个链表,那么它的时间复杂度就是O(n)。红黑树因为每个节点都是黑色或者红色两种颜色,当然他也有一些特性,

    1.根节点是黑色的

    2.红色节点的子节点和父节点都是黑色

    3.任何一条路经的黑色节点个数相同。

    技术分享图片

 

 

  

 

HashSet和TreeSet的实现与原理

原文:https://www.cnblogs.com/xp0813/p/11695443.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!