TreeMap与TreeSet
TreeMap与TreeSet
TreeSet底层则采用一个NavigableMap来保存TreeSet集合的元素。实际上,由于NavigableMap只是一个接口,因此底层依然是使用TreeMap来包含Set集合中的所有元素。
与HashSet完全类似的是,TreeSet里绝大部分方法都是直接调用TreeMap的方法来实现的。对于TreeMap而言,它采用一种被称为“红黑树“的排序二叉树来保存Map中每个Entry-每个Entry都被当成”红黑树“的一个节点来对待,如:
import java.util.TreeMap;
publicclass TreeMapTest {
publicstaticvoid main(String[] args){
TreeMap<String,Double> map = new TreeMap<String,Double>();
map.put("ccc", 89.0);
map.put("aaa", 80.0);
map.put("zzz", 80.0);
map.put("bbb", 89.0);
System.out.println(map);
}
}
Output:
{aaa=80.0, bbb=89.0, ccc=89.0, zzz=80.0}
当程序执行map.put(“ccc”,89.0)时,系统将直接把ccc-89.0这个Entry放入Map中,这个Entry就是该“红黑树“的根节点。接着程序执行map.put("aaa", 80.0);时,会将”aaa”80.0作为新节点添加到已有的红黑树中。以后每向TreeMap中放入一个key-value时,系统都需要将该Entry当成一个新节点,添加到已有红黑树中,通过这种方式就可保证TreeMap中所有key总是由小到达地排列。
可以形象地归纳HashMap,HashSet与TreeMap,TreeSet两类集合。HashMap,HashSet的存储集合元素的方式类似于不同的东西放在不同的位置,需要时就可以快速找到它们;TreeMap,TreeSet的存储集合元素的方式类似于体育课站队,第一个人自成一个队,以后每添加一个人都要先找到这个人应该插入的位置,然后在该位置插入此人即可。这样保证该队伍总是由矮到高排列-当然,二叉排序树的算法比“体育课站队“排序高效多了。
对于TreeMap而言,由于它底层采用“红黑树“来保存集合中的Entry,这意味着HashMap添加元素,取出元素的性能都比HashMap低。当TreeMap添加元素时,需要通过循环找到新增Entry的插入位置,因此比较消耗性能;当从TreeMap中取出元素时,需要通过循环才能找到合适的Entry,比较消耗性能。但HashMap,HashSet相比TreeMap,TreeSet的优势在于:TreeMap中的所有Entry总是按key根据指定排序规则保持有序状态,TreeSet中的所有元素总是根据指定排序规则保持有序状态。
红黑树是一种自平衡二叉查找树,树中每个节点的值,都大于或等于在它的左子树中的所有节点的值,并且小于或等于在它的右子树中的所有节点的值,这确保红黑树运行时可以快速地在树中查找和定位的所需节点。
TreeMap与TreeSet的更多相关文章
- java中treemap和treeset实现(红黑树)
java中treemap和treeset实现(红黑树) TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点. TreeSet 和 Tre ...
- TreeMap与TreeSet的实现
虽然TreeMap 是 Map 接口的常用实现类,而 TreeSet 是 Set 接口的常用实现类,但TreeSet底层是通过 TreeMap来实现的,因此二者的实现方式完全一样.而 TreeMap ...
- java集合类TreeMap和TreeSet
看这篇博客前,可以先看下下列这几篇博客 Red-Black Trees(红黑树) (TreeMap底层的实现就是用的红黑 ...
- Java集合(4)一 红黑树、TreeMap与TreeSet(下)
目录 Java集合(1)一 集合框架 Java集合(2)一 ArrayList 与 LinkList Java集合(3)一 红黑树.TreeMap与TreeSet(上) Java集合(4)一 红黑树. ...
- Java集合(3)一 红黑树、TreeMap与TreeSet(上)
目录 Java集合(1)一 集合框架 Java集合(2)一 ArrayList 与 LinkList Java集合(3)一 红黑树.TreeMap与TreeSet(上) Java集合(4)一 红黑树. ...
- TreeMap和TreeSet的区别与联系
TreeMap 和 TreeSet 是 Java Collection Framework 的两个重要成员,其中 TreeMap 是 Map 接口的常用实现类,而 TreeSet 是 Set 接口的常 ...
- TreeMap与TreeSet的源码分析
1.TreeMap源码 1.属性部分: private final Comparator<? super K> comparator;//比较器 private transient Ent ...
- treeMap and treeSet
TreeSet:如果要对对象进行排序,对象类要实现Comparable接口! TreeMap:如果要对对象进行排序,对象类要实现Comparable接口! 下面是我自己写的小程序主要传输对象 publ ...
- TreeMap和TreeSet在排序时如何比较元素?Collections工具类中的sort()方法如何比较元素?
TreeSet要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小.TreeMap要求存放的键值对映射的键必 ...
随机推荐
- Node.js新手教程——怎样实现文件上传功能
作者:zhanhailiang 日期:2014-11-16 本文将介绍怎样使用Node.js实现文件上传功能. 1. 初始化项目信息:npm init [root@~/wade/nodejs/node ...
- MongoDB初学者的配置环境和基础设施的使用
一个.mongoDB安装 1.第一MongoDB官方网站下载安装包http://www.mongodb.org/. 依照自己的操作系统进行下载. 2.在硬盘上建立两个文件夹分辨存放mongoDB安装文 ...
- Eclipse UML 工具 ObjectAid 介绍
概要 本文介绍如何使用 ObjectAid(http://www.objectaid.com/) UML Explorer 创建 UML 图,高速阅读代码. 安装 ObjectAid ObjectAi ...
- TCO14 2C L2: CliqueGraph,graph theory, clique
称号:http://community.topcoder.com/stat?c=problem_statement&pm=13251&rd=16017 參考:http://apps.t ...
- .pb.h:9:42: fatal error: google/protobuf/stubs/common.h: No such file or directory
看看这个你应该知道,找不到头文件,它可用于g++ 的-I 参数: -I/usr/local/lib/protobuf/include如需订购g++在/usr/local/lib/protobuf 以上 ...
- Android两个注意事项.深入了解Intent和IntentFilter(两)
深入理解Intent和IntentFiler(二) 转载请表明出处:http://blog.csdn.net/u012637501(嵌入式_小J的天空) 在上一篇文章中,我们比較具体学习了&q ...
- [dp] hdu 4472 Count
意甲冠军: 鉴于n节点,满足子节点的相同的树节点号的同一层较少不同的形式. 思考: dp[i][j] 代表i节点.最后,一个层j方法节点 由于满足同层节点,所以j一层又一层必须是j 整数倍 所以就能得 ...
- 【github课程】创建github仓库和库创建一个版本号,并添加到存储库文件的版本号
首先,需要登录github注册一个帐号:https://github.com/ 注册帐号登录后,.在右上角,"新仓库": 然后会出现例如以下的界面: 仅仅须要输入仓库的名称,描写叙 ...
- AppiumDriver java部分api
getAppStrings() 默认系统语言对应的Strings.xml文件内的数据. getAppStrings(String language) 查找某一个语言环境对应的字符串文件Strings. ...
- Msgbox消息框
于"自"<软件开发工具>一本书有这样的制剂,让我回忆--程序员可以做,让用户做:它允许用户做的少,即使是那些谁需要做的程序设置.我们应该做的. 这不是宣言.该是践行. ...