输出结果:
热词排行榜:#1 HotWord(word=淘宝崩了, count=95)#2 HotWord(word=闲鱼崩了, count=90)#3 HotWord(word=闲鱼崩了, count=85)#4 HotWord(word=钉钉崩了, count=80)
类属性看一下TreeMap的类属性 , 包含哪些字段?
public class TreeMap<K, V> extends AbstractMap<K, V> implements NavigableMap<K, V>, Cloneable, java.io.Serializable { /** * 排序方式 */ private final Comparator<? super K> comparator; /** * 红黑树根节点 */ private transient Entry<K, V> root; /** * 红黑树节点数 */ private transient int size = 0; /** * 红黑树的红黑节点表示 */ private static final boolean RED = false; private static final boolean BLACK = true; /** * 红黑树节点对象 */ static final class Entry<K, V> implements Map.Entry<K, V> { K key; V value; Entry<K, V> left; Entry<K, V> right; Entry<K, V> parent; boolean color = BLACK; /** * 构造方法 */ Entry(K key, V value, Entry<K, V> parent) { this.key = key; this.value = value; this.parent = parent; } }}
TreeMap类属性比较简单,包含排序方式comparator、红黑树根节点root、节点个数size等 。自定义了一个红黑树节点类Entry,内部属性包括键值对、左右子树、父节点、红黑标记值等 。
初始化TreeMap常用的初始化方式有下面三个:
- 无参初始化,使用默认的排序方式 。
- 指定排序方式的初始化
- 将普通Map转换为TreeMap,使用默认的排序方式 。
/** * 无参初始化 */Map<Integer, Integer> map1 = new TreeMap<>();/** * 指定排序方式初始化 */Map<Integer, Integer> map2 = new TreeMap<>(new Comparator<Integer>() { @Override public int compare(Integer o1, Integer o2) { return o1.compareTo(o2); }});/** * 将普通Map转换为TreeMap */Map<Integer, Integer> map3 = new TreeMap<>(new HashMap<>());
再看一下对应的源码实现:/** * 无参初始化 */public TreeMap() { comparator = null;}/** * 指定排序方式初始化 */public TreeMap(Comparator<? super K> comparator) { this.comparator = comparator;}/** * 将普通Map转换为TreeMap */public TreeMap(Map<? extends K, ? extends V> m) { comparator = null; putAll(m);}
方法列表由于TreeMap存储是按照键的顺序排列的,所以还可以进行范围查询,下面举一些示例 。import java.util.Collections;import java.util.Map;import java.util.TreeMap;/** * @author 一灯架构 * @apiNote TreeMap方法测试 */public class TreeMapTest { public static void main(String[] args) { // 1. 创建一个热词排行榜(按热度倒序),key是热度,value是热词内容 TreeMap<Integer, String> rankMap = new TreeMap<>(Collections.reverseorder()); rankMap.put(80, "阿里云崩了"); rankMap.put(100, "淘宝崩了"); rankMap.put(90, "钉钉崩了"); rankMap.put(60, "闲鱼崩了"); rankMap.put(70, "支付宝崩了"); System.out.println("热词排行榜:"); for (Map.Entry<Integer, String> entry : rankMap.entrySet()) { System.out.println("#" + entry.getKey() + " " + entry.getValue()); } System.out.println("-----------"); // 2. 获取排行榜的第一个元素 Map.Entry<Integer, String> firstEntry = rankMap.firstEntry(); System.out.println("firstEntry: " + firstEntry); // 3. 获取排行榜的最后一个元素 Map.Entry<Integer, String> lastEntry = rankMap.lastEntry(); System.out.println("lastEntry: " + lastEntry); // 4. 获取排行榜的大于指定键的最小元素(由于是倒序排列,所以结果是反的) Map.Entry<Integer, String> higherEntry = rankMap.higherEntry(70); System.out.println("higherEntry: " + higherEntry); // 5. 获取排行榜的小于指定键的最大元素 Map.Entry<Integer, String> lowerEntry = rankMap.lowerEntry(70); System.out.println("lowerEntry: " + lowerEntry); // 6. 获取排行榜的大于等于指定键的最小元素 Map.Entry<Integer, String> ceilingEntry = rankMap.ceilingEntry(70); System.out.println("ceilingEntry: " + ceilingEntry); // 7. 获取排行榜的小于等于指定键的最大元素 Map.Entry<Integer, String> floorEntry = rankMap.floorEntry(70); System.out.println("floorEntry: " + floorEntry); }}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 你不知道的Websocket协议,这次给你讲明白!
- 解密 Python 如何调用 Rust 编译生成的动态链接库
- Java与MySQL大数据处理的技巧
- 解密Java连接MySQL的最佳实践:选择适合你的方式
- 深入理解Java微服务架构与容器化部署
- 系统设计概念:生产 Web 应用的架构
- 桃花最佳观赏时间是什么时候 桃花的最佳观赏期是几月几日
- 抖音上的商务合作是什么意思呀 抖音上的商务合作是什么意思
- 全球气候变暖植物为什么没有变多的原因 全球气候变暖植物为什么没有变多
- 川芎的功效与作用及食用方法