阿里这段时间忙着制定下半年的OKR,其实在制定OKR的时候就能看出团队里谁是领导的嫡系,谁是团队的边角料 。嫡系的OKR都是从领导的核心项目分出来的,而其他人的OKR不会体现在领导的OKR里面,只配给嫡系做打下手的工作 。
“员工的绩效 , 在制定OKR的时候 , 已经确定了” 。
职场失意 , 摸鱼得意 。我还是安心的更新《解读JAVA源码专栏》,在这个系列中,我将手把手带着大家剖析Java核心组件的源码 , 内容包含集合、线程、线程池、并发、队列等,深入了解其背后的设计思想和实现细节,轻松应对工作面试 。这是解读Java源码系列的第六篇,将跟大家一起学习Java中比较特殊的数据结构 - TreeMap
。
引言上篇文章讲到LinkedHashMap
可以保证元素的插入顺序或者访问顺序,而TreeMap
也能保证元素顺序,不过按照键的顺序进行排序 。插入到TreeMap
中的键值对,会自动按照键的顺序进行排序 。
简介HashMap
底层结构是基于数组实现的,而TreeMap
底层结构是基于红黑树实现的 。TreeMap
利用红黑树的特性实现对键的排序 。额外介绍一下红黑树的特性:
- 节点是红色或者黑色
- 根节点是黑色
- 所有叶子节点是黑色
- 每个红色结点的两个子结点都是黑色 。(从每个叶子到根的所有路径上不能有两个连续的红色结点)
- 从任一结点到其每个叶子的所有路径都包含相同数目的黑色结点 。
文章插图
使用示例利用
TreeMap
可以自动对键进行排序的特性 , 比较适用一些需要排序的场景,比如排行榜、商品列表等 。Map<Integer, String> map = new TreeMap<>();map.put(1, "One");map.put(3, "Three");map.put(2, "Two");System.out.println(map); // 输出:{1=One, 2=Two, 3=Three}
实现一个简单的热词排行榜功能:/** * @author 一灯架构 * @apiNote 热词 **/public class Hotword { /** * 热词内容 */ String word; /** * 热度 */ Integer count; public HotWord(String word, Integer count) { this.word = word; this.count = count; }}
import java.util.Comparator;import java.util.TreeMap;/** * @author 一灯架构 * @apiNote 热词排行榜 **/public class Leaderboard { /** * 自定义排序方式 , 按照热度降序排列 */ private static final Comparator<HotWord> HOT_WORD_COMPARATOR = new Comparator<HotWord>() { @Override public int compare(HotWord o1, HotWord o2) { return Integer.compare(o2.count, o1.count); // 降序排列 } }; // 使用TreeMap存储排行榜数据,key是热词对象,value是热词标题 private TreeMap<HotWord, String> rankMap = new TreeMap<>(HOT_WORD_COMPARATOR); // 添加成绩 public void addHotWord(String name, int score) { rankMap.put(new HotWord(name, score), name); } /** * 打印排行榜 */ public void printLeaderboard() { System.out.println("热词排行榜:"); int rank = 1; for (HotWord hotWord : rankMap.keySet()) { System.out.println("#" + rank + " " + hotWord); rank++; } } public static void mAIn(String[] args) { Leaderboard leaderboard = new Leaderboard(); leaderboard.addHotWord("闲鱼崩了", 90); leaderboard.addHotWord("淘宝崩了", 95); leaderboard.addHotWord("闲鱼崩了", 85); leaderboard.addHotWord("钉钉崩了", 80); leaderboard.printLeaderboard(); }}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 你不知道的Websocket协议,这次给你讲明白!
- 解密 Python 如何调用 Rust 编译生成的动态链接库
- Java与MySQL大数据处理的技巧
- 解密Java连接MySQL的最佳实践:选择适合你的方式
- 深入理解Java微服务架构与容器化部署
- 系统设计概念:生产 Web 应用的架构
- 桃花最佳观赏时间是什么时候 桃花的最佳观赏期是几月几日
- 抖音上的商务合作是什么意思呀 抖音上的商务合作是什么意思
- 全球气候变暖植物为什么没有变多的原因 全球气候变暖植物为什么没有变多
- 川芎的功效与作用及食用方法