c++ 与 Java 之 红黑树 哈希表 辨析

c++ 与 Java 之 红黑树 哈希表 辨析

关于c++ 与 Java 的红黑树 哈希表 辨析,千言万语不如一张表来得快:
  based-on 红黑树 based-on 哈希表
C++(STL) set,map,multiset,multimap(默认) hash_map,hash_set,hash_multiset,hash_multimap
java TreeMap、TreeSet HashMap、HashSet


☆ 红黑树与Hash的区别与选择:

权衡三个因素: 查找速度, 数据量, 内存使用,可扩展性,有序性。

    hash查找速度会比RB树快,而且查找速度基本和数据量大小无关,属于常数级别;而RB树的查找速度是log(n)级别。并不一定常数就比log(n) 小,hash还有hash函数的耗时,明白了吧,如果你考虑效率,特别是在元素达到一定数量级时,考虑考虑hash。但若你对内存使用特别严格, 希望程序尽可能少消耗内存,那么一定要小心,hash可能会让你陷入尴尬,特别是当你的hash对象特别多时,你就更无法控制了,而且 hash的构造速度较慢。

    红黑树并不适应所有应用树的领域。如果数据基本上是静态的,那么让他们待在他们能够插入,并且不影响平衡的地方会具有更好的性能。如果数据完全是静态的,例如,做一个哈希表,性能可能会更好一些。

    红黑树是有序的,Hash是无序的,根据需求来选择。拿红黑树实现的Map和Hash实现的HashMap相比:如果只需要判断Map中某个值是否存在之类的操作,当然是Hash实现的要更加高效。如果是需要将两个Map求并集交集差集等大量比较操作,就是红黑树实现的Map更加高效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值