大话TreeMap的put,get过程
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过程相关推荐
- 大话ConcurrentHashMap的put,get过程
put 最最最一开始得检查桶是否进行初始化,然后确定判断所放桶中是否有元素,没有元素的话,那么就用CAS的方式添加元素,当然有可能失败,有可能其他线程已经抢占先添加,这个过程在一个死循环里,失败了再从 ...
- 大话HashMap的put,get过程
put 最先判断桶的长度是否为0,为0的话则需要先对桶进行初始化操作,接着,求出hashcode并通过扰动函数确定要put到哪个桶中,若桶中没有元素直接插入,若有元素则判断key是否相等,如果相等的话 ...
- 1.10、Java面经 内容太杂不详细 没用
1.1java 的 8 种基本数据类型 装箱 拆箱 https://blog.csdn.net/daidaineteasy/article/details/51088269 1.1.1.8 种基本数据 ...
- 硬刚一周,3W字总结,一年的经验告诉你如何准备校招!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 前期准备 校招在我看来是一件时间特别长的战争,为什么这么说 ...
- TreeSet源码解析
TreeSet概述 所有实现的接口: Serializable, Cloneable, Iterable<E>, Collection<E>, NavigableSet< ...
- collection集合 厂家_一篇搞定Java集合类原理-WEB资讯专栏-DMOZ中文网站分类目录
transient Object[] elementData; // non-private to simplify nested class access初始容量为10private static ...
- 史上最全讲解:JAVA中的Map与Thread
史上最全讲解:JAVA中的Map与Thread 文章目录 史上最全讲解:JAVA中的Map与Thread Map HashMap TreeMap Properties Thread 开启多线程方法1 ...
- 3W字总结:如何准备校招进大厂?
前期准备 校招在我看来是一件时间特别长的战争,为什么这么说呢,因为从你开始准备校招的那一刻开始,到你正式拿到offer的,并且确定去哪一家公司时,时间差不多一年左右,这个时间其实比考研.公务员等都要长 ...
- 3W字经验总结,告诉你如何准备校招!
前期准备 校招在我看来是一件时间特别长的战争,为什么这么说呢,因为从你开始准备校招的那一刻开始,到你正式拿到offer的,并且确定去哪一家公司时,时间差不多一年左右,这个时间其实比考研.公务员等都要长 ...
最新文章
- Android Studio-设置鼠标悬停显示方法声明
- 数据结构与算法——二叉排序树详解以及代码实现
- python求小数部分_python-numpy数组的小数部分
- 利用fnd_flex_keyval包轻松获取关键性弹性域组合描述字段
- 2018 java 阿里笔试题
- 大二 数据结构 期末复习题(仅供参考)
- 淘宝运营 淘宝客的模式 、优点以及推广方案
- 为什么mysql中不要用blob这种大字段
- android 实现谷歌地图
- 目前常用 心电数据库ECG:MITBIH,AHA,CSE,ST-T,PTB,PAF 详细介绍+下载
- 电力系统系统潮流分析【IEEE 57 节点】(Matlab代码实现)
- VOT 2015 Benchmark 使用教程
- TypeScript报错信息表(备注)
- 基于STM32F429的RGB屏使用
- android开机动画bootanimation 分析
- 【知识点】多光谱与高光谱的区别
- 小孢子:在?我用本地环境pytest带你玩自定义算子
- 第十四章:Qt网络编程
- 蓝桥杯嵌入式第十届省赛真题
- 【算法导论-35】图算法JGraphT开源库介绍
热门文章
- Spring Boot 静态资源处理,原来如此!
- JAVA线程间协作:wait.notify.notifyAll
- Django静态文件处理、中间件及Admin站点
- Linux下编写UDP/TCP版本的服务器和客户端的流程
- “保持耐心”,永远从用户角度出发— 专访阿里巴巴淘系技术内容中台负责人吴桂林(梁舒)...
- 音视频技术开发——还有什么不能讲的?
- TCP的困境与解决方案
- Java多线程之volatile详解
- 算法工程师眼中的AI岗位
- 《直播疑难杂症排查系列》之一 :播放失败