前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java基础】HashMap、TreeMap、都用了红黑树

【Java基础】HashMap、TreeMap、都用了红黑树

作者头像
韩旭051
发布2021-04-14 14:54:09
4200
发布2021-04-14 14:54:09
举报
文章被收录于专栏:刷题笔记刷题笔记

引子

昨天模拟面试,面试官问到了 哈希map 和 treeMap 我说都是使用了 红黑树 问我有什么区别 还有复杂度 稍微一深入讨论 我就废掉了 先亡羊补牢一下

文章目录

1)、使用层次上的区别:

HashMap:

  1. 数组+链表存储key-value,1.8加入红黑树(优化链表查找过长的问题)
  2. 允许null作为key和value,key不可以重复,value允许重复
  3. 不能保证插入顺序是有序的
  4. 线程非安全

TreeMap:

  1. 基于红黑二叉树的NavigableMap的实现
  2. 不允许null,key不可以重复,value允许重复
  3. 元素应当实现Comparable接口或者实现Comparator接口,元素进行自动排序
  4. 线程非安全

2)、底层数据结构

HashMap:

1.8之前数组+链表,1.8加入红黑树

HashTree:

实现了SotredMap接口,它是有序的集合。 而且是一个红黑树结构,每个key-value都作为一个红黑树的节点。 如果在调用TreeMap的构造函数时没有指定比较器,则根据key执行自然排序

总结:

红黑树特征:

1、每个节点要么是红色,要么是黑色; 2、根节点永远是黑色的; 3、所有的叶节点都是是黑色的(注意这里说叶子节点其实是上图中的 NIL 节点); 4、每个红色节点的两个子节点一定都是黑色; 5、从任一节点到其子树中每个叶子节点的路径都包含相同数量的黑色节点;

红黑树左旋、右旋:
代码语言:javascript
复制
右旋——自己变为左孩子的右孩子;
左旋——自己变为右孩子的左孩子。

补充

Java集合关系图

在这里插入图片描述
在这里插入图片描述

复杂度总结

容器名称

存储形式

复杂度

查询

插入

Map

HashMap

哈希表

O(1)

O(1)

NavigableMap

TreeMap

红黑树

O(log n)

O(log n)

Collection

List

ArrayList

静态数组

O(1)

O(n)

LinkedList

双向链表

O(n)

O(n)

Set

HashSet

HashMap

O(1)

O(1)

TreeSet

TreeMap

O(log n)

O(log n)

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-03-22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引子
    • 文章目录
    • 1)、使用层次上的区别:
      • HashMap:
        • TreeMap:
        • 2)、底层数据结构
          • HashMap:
            • HashTree:
            • 总结:
              • 红黑树特征:
                • 红黑树左旋、右旋:
            • 补充
              • 复杂度总结
              相关产品与服务
              容器服务
              腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档