zoukankan      html  css  js  c++  java
  • TreeMap与TreeSet

    TreeMapTreeSet

    TreeSet底层则采用一个NavigableMap来保存TreeSet集合的元素。实际上,由于NavigableMap只是一个接口,因此底层依然是使用TreeMap来包含Set集合中的所有元素。

    HashSet完全类似的是,TreeSet里绝大部分方法都是直接调用TreeMap的方法来实现的。对于TreeMap而言,它采用一种被称为“红黑树“的排序二叉树来保存Map中每个Entry-每个Entry都被当成”红黑树“的一个节点来对待,如:

    import java.util.TreeMap;

    publicclass TreeMapTest {

         publicstaticvoid main(String[] args){

           TreeMap<String,Double> map = new TreeMap<String,Double>();

           map.put("ccc", 89.0);

           map.put("aaa", 80.0);

           map.put("zzz", 80.0);

           map.put("bbb", 89.0);

           System.out.println(map);

         }

    }

     

    Output:

    {aaa=80.0, bbb=89.0, ccc=89.0, zzz=80.0}

    当程序执行map.put(“ccc”,89.0)时,系统将直接把ccc-89.0这个Entry放入Map中,这个Entry就是该“红黑树“的根节点。接着程序执行map.put("aaa", 80.0);时,会将”aaa”80.0作为新节点添加到已有的红黑树中。以后每向TreeMap中放入一个key-value时,系统都需要将该Entry当成一个新节点,添加到已有红黑树中,通过这种方式就可保证TreeMap中所有key总是由小到达地排列。

    可以形象地归纳HashMap,HashSetTreeMap,TreeSet两类集合。HashMap,HashSet的存储集合元素的方式类似于不同的东西放在不同的位置,需要时就可以快速找到它们;TreeMap,TreeSet的存储集合元素的方式类似于体育课站队,第一个人自成一个队,以后每添加一个人都要先找到这个人应该插入的位置,然后在该位置插入此人即可。这样保证该队伍总是由矮到高排列-当然,二叉排序树的算法比“体育课站队“排序高效多了。

    对于TreeMap而言,由于它底层采用“红黑树“来保存集合中的Entry,这意味着HashMap添加元素,取出元素的性能都比HashMap低。当TreeMap添加元素时,需要通过循环找到新增Entry的插入位置,因此比较消耗性能;当从TreeMap中取出元素时,需要通过循环才能找到合适的Entry,比较消耗性能。但HashMap,HashSet相比TreeMap,TreeSet的优势在于:TreeMap中的所有Entry总是按key根据指定排序规则保持有序状态,TreeSet中的所有元素总是根据指定排序规则保持有序状态。

    红黑树是一种自平衡二叉查找树,树中每个节点的值,都大于或等于在它的左子树中的所有节点的值,并且小于或等于在它的右子树中的所有节点的值,这确保红黑树运行时可以快速地在树中查找和定位的所需节点。

  • 相关阅读:
    【web前端优化之图片延迟加载初探】中午不睡,下午崩溃
    【javascript培训第一天】语言基础
    【实战HTML5与CSS3 第一篇】初探水深,美丽的导航,绚丽的图片爆炸!!
    【Google Fusion Tables API 初探】地图与云计算
    【javascript培训第三天】查遗补漏
    一道面试题带来的前端优化——实现星星点评
    【CSS3初探之变形与动画】令人惊叹的CSS3
    【javascript培训第二天】DOM与BOM
    工作了一个星期各位一定累了吧,那我们一起来表单验证一番吧!
    【CSS3初探之背景边框相关】奇葩的与老大吵了一架,奇葩的五分钟offer,奇葩的一天。。。
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3230774.html
Copyright © 2011-2022 走看看