get

首先会判断在初始化TreeMap的时候是否传入了外部选择器Comparator,如果传入了,那么利用Comparator遍历整棵树,找到要存放的位置,利用Comparator的compare()方法比较树根节点p的key和传入的key,compare方法等于0说明相等,那么直接返回根节点,小于0的话p=p.left,大于0的话p=p.right。若没有找到返回null。没有传入Comparator,那么利用key对象实现Comparable接口重写的compareTo()方法,还是先比较根节点p,k.compareTo(p.key)若等于0,返回根节点,小于0的话p=p.left,大于0的话p=p.right。没有找到返回null。

put

首先获取根节点,为空的话,那么直接新建节点,并把当前节点设为根节点。如果不为空,那么获取外部选择器,如果获取到的话,用comparator方式的方式查找put位置,反之利用key的compareTo方法。外部比较器comparator的compare方法允许key值为空,而compareTo方法不允许为null。所以注意了,TreeMap是可以放null的key,但是get(null)却得不到想要的value。遍历整个树如果找到了key相同的节点,那么就把该节点的value值更新为我们的新值。如果遍历完整个树都没找到相同的key值,那么,用key,value新建一个节点,插入到上述遍历过程遍历到的位置。最后插入之后要做平衡处理。

大话TreeMap的put,get过程相关推荐

  1. 大话ConcurrentHashMap的put,get过程

    put 最最最一开始得检查桶是否进行初始化,然后确定判断所放桶中是否有元素,没有元素的话,那么就用CAS的方式添加元素,当然有可能失败,有可能其他线程已经抢占先添加,这个过程在一个死循环里,失败了再从 ...

  2. 大话HashMap的put,get过程

    put 最先判断桶的长度是否为0,为0的话则需要先对桶进行初始化操作,接着,求出hashcode并通过扰动函数确定要put到哪个桶中,若桶中没有元素直接插入,若有元素则判断key是否相等,如果相等的话 ...

  3. 1.10、Java面经 内容太杂不详细 没用

    1.1java 的 8 种基本数据类型 装箱 拆箱 https://blog.csdn.net/daidaineteasy/article/details/51088269 1.1.1.8 种基本数据 ...

  4. 硬刚一周,3W字总结,一年的经验告诉你如何准备校招!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 前期准备 校招在我看来是一件时间特别长的战争,为什么这么说 ...

  5. TreeSet源码解析

    TreeSet概述 所有实现的接口: Serializable, Cloneable, Iterable<E>, Collection<E>, NavigableSet< ...

  6. collection集合 厂家_一篇搞定Java集合类原理-WEB资讯专栏-DMOZ中文网站分类目录

    transient Object[] elementData; // non-private to simplify nested class access初始容量为10private static ...

  7. 史上最全讲解:JAVA中的Map与Thread

    史上最全讲解:JAVA中的Map与Thread 文章目录 史上最全讲解:JAVA中的Map与Thread Map HashMap TreeMap Properties Thread 开启多线程方法1 ...

  8. 3W字总结:如何准备校招进大厂?

    前期准备 校招在我看来是一件时间特别长的战争,为什么这么说呢,因为从你开始准备校招的那一刻开始,到你正式拿到offer的,并且确定去哪一家公司时,时间差不多一年左右,这个时间其实比考研.公务员等都要长 ...

  9. 3W字经验总结,告诉你如何准备校招!

    前期准备 校招在我看来是一件时间特别长的战争,为什么这么说呢,因为从你开始准备校招的那一刻开始,到你正式拿到offer的,并且确定去哪一家公司时,时间差不多一年左右,这个时间其实比考研.公务员等都要长 ...

最新文章

  1. Android Studio-设置鼠标悬停显示方法声明
  2. 数据结构与算法——二叉排序树详解以及代码实现
  3. python求小数部分_python-numpy数组的小数部分
  4. 利用fnd_flex_keyval包轻松获取关键性弹性域组合描述字段
  5. 2018 java 阿里笔试题
  6. 大二 数据结构 期末复习题(仅供参考)
  7. 淘宝运营 淘宝客的模式 、优点以及推广方案
  8. 为什么mysql中不要用blob这种大字段
  9. android 实现谷歌地图
  10. 目前常用 心电数据库ECG:MITBIH,AHA,CSE,ST-T,PTB,PAF 详细介绍+下载
  11. 电力系统系统潮流分析【IEEE 57 节点】(Matlab代码实现)
  12. VOT 2015 Benchmark 使用教程
  13. TypeScript报错信息表(备注)
  14. 基于STM32F429的RGB屏使用
  15. android开机动画bootanimation 分析
  16. 【知识点】多光谱与高光谱的区别
  17. 小孢子:在?我用本地环境pytest带你玩自定义算子
  18. 第十四章:Qt网络编程
  19. 蓝桥杯嵌入式第十届省赛真题
  20. 【算法导论-35】图算法JGraphT开源库介绍

热门文章

  1. Spring Boot 静态资源处理,原来如此!
  2. JAVA线程间协作:wait.notify.notifyAll
  3. Django静态文件处理、中间件及Admin站点
  4. Linux下编写UDP/TCP版本的服务器和客户端的流程
  5. “保持耐心”,永远从用户角度出发— 专访阿里巴巴淘系技术内容中台负责人吴桂林(梁舒)...
  6. 音视频技术开发——还有什么不能讲的?
  7. TCP的困境与解决方案
  8. Java多线程之volatile详解
  9. 算法工程师眼中的AI岗位
  10. 《直播疑难杂症排查系列》之一 :播放失败