当前课程知识点:JAVA程序设计进阶 >  第七章 深入集合Collection >  7.4 TreeMap与LinkedHashMap >  Video

返回《JAVA程序设计进阶》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《JAVA程序设计进阶》慕课在线视频列表

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

它的有四个类实现的这个接口

每个类都有它各自的长处和短处

所以我们作为程序员

要编程序的时候

根据自己的需要

来决定我到底使用

哪一种数据结构

因为你使用对的话

会提高你的性能

如果你使用错的话

有可能会降低

你的程序使用的性能

好 这一节内容就介绍到这里

JAVA程序设计进阶课程列表:

第一章 线程(上)

-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

第六章 Java虚拟机

-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

第七章 深入集合Collection

-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

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。