Day1-TreeMap集合怎样保证有序性

简介: 笔记

TreeMap集合怎样保证有序性


首先看一下TreeMap集合的使用,TreeMap集合也是键值对的,我们添加下面四个元素

package com.tset.one;
import java.util.TreeMap;
/**
 * @author :caizhengjie
 * @description:TODO
 * @date :2021/7/21 10:48 下午
 */
public class TestTreeMap {
    public static void main(String[] args) {
        TreeMap<String,Integer> treeMap = new TreeMap<>();
        treeMap.put("tom",99);
        treeMap.put("jack",73);
        treeMap.put("bob",85);
        treeMap.put("jery",62);
        // 通过lambada表达式输出key,value
        treeMap.forEach((k,v) -> System.out.println(k + ": " + v));      
    }
}
// 运行结果
bob: 85
jack: 73
jery: 62
tom: 99

发现遍历出来的结果是有序的,按照key的升序依次遍历,联想到Hash Map,它遍历出来的结果是无序的,它是按照key的hash进行散列的,那TreeMap是怎么样保证节点遍历出来是有序的呢?我们需要看一下源代码

8.png

它是一个红黑树,我们知道红黑树是一个平衡树,可以保证我们的节点有序,显然TreeMap底层用红黑树来保证节点的有序性,通过查看TreeMap的成员变量9.png


我们可以发现root是红黑树的根节点


TreeMap底层

TreeMap实现了SotredMap接口,它是有序的集合。

TreeMap底层数据结构是一个红黑树,每个key-value都作为一个红黑树的节点。

如果在调用TreeMap的构造函数时没有指定比较器,则根据key执行自然排序。

10.png


相关文章
顺序表应用6:有序顺序表查询
顺序表应用6:有序顺序表查询
|
21天前
|
安全 Java 容器
【JaveEE】——多线程中使用顺序表,队列,哈希表
多线程环境下使用ArrayList(同步机制,写时拷贝),使用队列,哈希表(高频)ConcurrentHashMap(缩小锁粒度,CAS,扩容优化)
|
3月前
|
存储 Java
TreeMap基于红黑树实现,保证键的有序性,支持范围查询
【10月更文挑战第19天】在Java集合框架中,Map接口是存储键值对的重要工具,HashMap和TreeMap是最常用的两个实现类。HashMap基于哈希表实现,支持null键和值,查找、插入和删除操作平均时间复杂度接近O(1)。TreeMap基于红黑树实现,保证键的有序性,支持范围查询。两者各具特色,深入了解它们的设计思想有助于更好地应用。
40 4
|
3月前
|
存储 Java
Java集合框架中的HashSet和TreeSet,解释了它们如何分别实现无序和有序存储。
【10月更文挑战第13天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解释了它们如何分别实现无序和有序存储。通过解析内部机制和示例代码,帮助读者理解这两种集合的特点和应用场景,从而更好地选择合适的集合类型满足实际需求。
39 3
|
8月前
|
存储 C语言
数据结构— —线性表的顺序表示和实现
数据结构— —线性表的顺序表示和实现
|
8月前
|
存储 关系型数据库 MySQL
MySQL索引的本质,MySQL索引的实现,MySQL索引的数据结构
MySQL索引的本质,MySQL索引的实现,MySQL索引的数据结构
59 1
|
8月前
|
算法 关系型数据库 MySQL
为什么mysql索引使用B+Tree数据结构
为什么mysql索引使用B+Tree数据结构
66 0
|
存储 算法
【数据结构】顺序表的有序插入、扩容以及排序
【数据结构】顺序表的有序插入、扩容以及排序
189 0
数据结构线性表的顺序实现
数据结构线性表的顺序实现