当前课程知识点:JAVA程序设计进阶 > 第七章 深入集合Collection > 7.4 TreeMap与LinkedHashMap > Video
这一节我们来介绍一下
TreeMap与LinkedHashMap
这两种数据结构
那TreeMap它实际上是对Map接口
采用树的方式来实现
它不允许有空值点的存在
本身它是非线程安全的
然后这个TreeMap
它的键值是有顺序的
那实际上TreeMap
它的数据结构是采用了红黑树
那红黑树它是自平衡二叉查找树
在进行插入和删除操作时
通过特定的操作
能够保持二叉查找树的平衡
从而获得较高的查找性能
那它的优点是说可以在
Olog n的时间内
做查找 插入和删除
那在刚才的图中我们可以看到
这个它的每一个Entry
是红黑树的节点
包含了红黑树的6个基本组成成分
Key value left right parent color
那Entry节点会根据Key来进行排序
本身Entry节点里面
所包含的内容就是value
那红黑树进行排序时
根据Entry中的key来去进行排序
那Entry中的key的比较大小
那就需要实现我们的比较器comparator
通过它来进行判断
那至于TreeMap它的优势是什么呢
首先它的空间利用率高
相比HashMap它的里面的大小
数组大小必须是2的N次方
而这个TreeMap中树的每个节点
它就代表了一个元素
所以说TreeMap
它的空间利用率高
另外TreeMap它性能比较稳定
Hash的碰撞会导致HashMap
这个类的查询开销要提高
那HashMap它在扩容时候
它还要重新进行hash操作
所以它的开销比较高
而我们的TreeMap
它的操作都能够
在Olog n的时间内去完成
那另外一个类呢叫LinkedHashMap
那LinkedHashMap呢
使用它就是 是一个Map
它是把我们的Map接口
利用哈希表和链表这个来实现
提供所有可选的映射操作
并且还允许使用空值和空键
那这个类它本身是非线程安全的
而且具有可预知的迭代顺序
我们来看看LinkedHashMap
它里面的几个方法的实现
那第一个方法是叫(at)Entry
那(at)Entry的话
它的参数包括hasp包括key
包括value
包括它的bucketlndex
那这个(at)Entry方法呢
它是要通过调用create方法
将新元素以双向链表的方式
添加到我们的映射当中
所以说它和之前的那个
HashMap的区别就是
HashMap里面的数据结构
第一级结构是一个数组
第二级结构是一个单向链表
而我们的LinkedHashMap
第二级结构是一个双向链表
所以在往里添加的时候
就可以根据你要添加元素的位置
来决定是从正向的
去检索往里添加
还是反向从队尾
开始去检索进行添加
再往下就是这个createEntry
那createEntry的话就是
创建我们一个节点对象
再把它添加到我们的链表当中
那我们再看一下
LinkedHashMap的其他方法
这个方法叫get
实际上get方法就是说
我给你一个key
你能给我返回一个value
那在这个过程当中是要
主要是根据我们这key这个位置
得到我们这个Entry这节点
然后Entry再返回它的value值
那再往下一个方法叫recordAccess
那就是记录一下
我们整个访问的过程
那么可以分析一下
Map它的一个适用范围
因为我们介绍了这么好几个Map
目前也看到HashMap
它适用于一般的键值映射类的需求
而HashTable适用于
有多线程并发的场合
而TreeMap适用于
需要按照键来排序
我们的Key value
按照key来排序一种迭代场合
而LinkedHashMap适用于
特殊顺序的一种迭代场合
比如说可能LRU算法
所以我们可以看到针对接口Map
它的有四个类实现的这个接口
每个类都有它各自的长处和短处
所以我们作为程序员
要编程序的时候
根据自己的需要
来决定我到底使用
哪一种数据结构
因为你使用对的话
会提高你的性能
如果你使用错的话
有可能会降低
你的程序使用的性能
好 这一节内容就介绍到这里
-1.0 导学
--Video
-1.1 线程的基本概念
--Video
-1.1 线程的基本概念--作业
-1.2 通过Thread类创建线程
--Video
-1.2 通过Thread类创建线程--作业
-1.3 线程的休眠
--Video
-1.3 线程的休眠--作业
-1.4 Thread类详解
--Video
-1.5 通过Runnable接口创建线程
--Video
-1.5 通过Runnable接口创建线程--作业
-1.6 线程内部的数据共享
--Video
-2.0 导学
--Video
-2.1 线程同步的思路
--Video
-2.2 线程同步的实现方式—Synchronization
--Video
-2.3 线程的等待与唤醒
--Video
-2.4 后台进程
--Video
-2.5 线程的生命周期与死锁
--Video
-2.6 线程的调度
--Video
-3.0 导学
--Video
-3.1 线程安全与线程兼容与对立
--Video
-3.2 线程的安全实现-互斥同步
--Video
-3.3 线程的安全实现-非阻塞同步
--Video
-3.4 线程的安全实现-无同步方案
--Video
-3.5 锁优化
--Video
-4.0 导学
--Video
-4.1 URL对象
--Video
-4.2 URLConnection对象
--Video
-4.3 Get请求与Post请求
--Video
-4.4 Socket通信原理
--Video
-4.5 Socket通信实现
--Video
-5.0 导学
--Video
-5.1 Socket 多客户端通信实现
--Video
-5.2 数据报通信
--Video
-5.3 使用数据报进行广播通信
--Video
-5.4 网络聊天程序
--Video
-6.0 导学
--Video
-6.1 Java虚拟机概念
--Video
-6.2 Java虚拟机内存划分
--Video
-6.3 Java虚拟机类加载机制
--Video
-6.4 判断对象是否存活算法及对象引用
--Video
-6.5 分代垃圾回收
--Video
-6.6 典型的垃圾收集算法
--Video
-6.7典型的垃圾收集器
--Video
-7.0 导学
--Video
-7.1 集合框架与ArrayList
--Video
-7.2 LinkedList
--Video
-7.3 HashMap与HashTable
--Video
-7.4 TreeMap与LinkedHashMap
--Video
-7.5 HashSet
--Video
-8.0 导学
--Video
-8.1 Java反射机制
--Video
-8.2 Java静态代理
--Video
-8.3 Java动态代理
--Video
-8.4 Java 反射扩展-jvm加载类原理
--Video
-8.5 Java进阶课程总结
--Video