前面介绍了Map接口的实现类LinkedHashMap,LinkedHashMap存储的元素是有序的,可以保持元素的插入顺序,但不能对元素进行自动排序。在一些编程应用场景中,如果在数据的存储过程中,能够自动对数据进行排序,将会极大提高编程效率,程序员无需再为数据排序编写必要的代码。例如,一般大量的数据都被存储在大型数据库中,程序员需要能够按照多个键对索引排序以提供搜索效率。

Map接口有一个重要的实现类TreeMap,TreeMap可以实现存储元素的自动排序。在TreeMap中,键值对之间按键有序,TreeMap的实现基础是平衡二叉树。

1、TreeMap 的存储结构

TreeMap使用的存储结构是平衡二叉树,也称为红黑树。它首先是一棵二叉树,具有二叉树所有的特性,即树中的任何节点的值大于它的左子节点,且小于它的右子节点,如果是一棵左右完全均衡的二叉树,元素的查找效率将获得极大提高。最坏的情况就是一边倒,只有左子树或只有右子树,这样势必会导致二叉树的检索效率大大降低。为了维持二叉树的平衡,程序员们提出了各种实现的算法,其中平衡二叉树就是其中的一种算法。平衡二叉树的数据结构如下图所示:

TreeMap存储结构

2、TreeMap 的构造函数

TreeMap 提供了三个常用的构造函数,说明如下:

● TreeMap()

使用该构造函数,TreeMap中的key按照自然排序进行排列。

● TreeMap(Map extends K, ? extends V> copyFrom)

使用该构造函数,用指定的Map填充TreeMap,TreeMap中的key按照自然排序进行排列。

● TreeMap(Comparator super K> comparator)

使用该构造函数,指定元素排序所用的比较器,key排列顺序由比较器指定。

2、TreeMap 元素的存取

同HashMap一样,TreeMap提供了get和put方法用于元素的存取。

● put(K key, V value)

该方法用于添加一个Entry(结点,包括key和value)到TreeMap对象,key为与指定值将要关联的键,value为使用指定键关联的值。如果key对应的值已经存在,则将key对应的值修改为value。

● V get(Object key)

该方法用于获取指定key的value,key为与value相关联的键。

TreeMap 元素存取示例代码如下:

该程序声明了TreeMap对象。首先用put方法添加了6个Entry结点,然后用get方法获取指定key的值,再用put方法修改指定key的值。程序输出结果如下图所示:

TreeMapDemo1输出结果

从图中输出结果可以看出,TreeMap按照传入的key进行自动排序。

3、TreeMap 的遍历

同HashMap、LinkedHashMap相同,TreeMap也不能用迭代器、foreach等方法遍历。如果需要遍历TreeMap,可以通过TreeMap的keySet方法返回TreeMap中key值的集合进行遍历。

TreeMap遍历代码如下:

程序获取TreeMap所有的键值对(Entry)对象,并以Set集合形式返回。然后,通过遍历包含键值对(Entry)对象的Set集合,得到每一个键值对。程序输出结果如下图所示:

遍历TreeMap输出结果

■ 知识点拨

HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap。HashMap通常比TreeMap效率要高一些,一个是哈希表,一个是二叉树,建议多使用HashMap,在需要排序的Map时候才用TreeMap。

Java 自动排序map_跟我学Java编程—应用自动排序的TreeMap相关推荐

  1. java访问修饰符详解——学java,零基础不怕,不只要理论,更要实践+项目,a href=http://www.bjweixin.com太原维信科技提供 /a...

    java访问修饰符详解--学java,零基础不怕,不只要理论,更要实践+项目 <a href=http://www.bjweixin.com>太原维信科技提供 </a> pub ...

  2. 机械转行java自学经历,零基础学java,血泪总结的干货

    机械转行java自学经历,零基础学java,血泪总结的干货 1.我为什么转行 2.转行之路 3.面试之路 自学路上的网站 Java教程 实践项目一站式学习 bilibili 自学书籍 <Java ...

  3. java学习路线,一个初中生学java要多久,java难学吗

    一门永不过时的编程语言--Java 软件开发 java难学吗 java不难,你可以做如下学习 一.到相应的培训机构付费学习 别在这说培训机构没用什么的,不过一定要找正规的培训机构,不然容易被坑.培训机 ...

  4. 新手学java还是python知乎_学java好还是Python好?

    首先我简单的说下目前的市场发展行情,Java和Python发行时间都有很多年了,但是或许你自己也应该清楚,Python是什么时候开始步入我们的生活,步入我们的眼线的,对,就是近几年,这几年随着培训机构 ...

  5. java看什么书好_学java看什么书比较好

    1 学java看什么书比较好 随着互联网的发展,java随之横空崛起,成为了现在的热门编程语言之一,很多看到了这个行业的美好前景,都趋之若鹜奔向这个行业,因此很多人都想要学好这门java语言.那么下面 ...

  6. java 包装类可以被继承_小白学Java:包装类

    小白学Java:包装类 学习了许久的Java,我们知道Java是一种面向对象的语言,万物皆对象.但是我们之前在说到Java基本数据类型的时候,由于处理对象需要额外的系统开销,于是出于对性能的考虑,基本 ...

  7. 现在学java还是python好_该学Java还是Python?

    作为"常青树大佬"Java 和"新晋大佬"Python ,经常被人拿来对比,对于刚开始起步学习编程的同学来说,会迷惑且最经常问的问题是,我该学 Java 还是 ...

  8. 学会java可是没学历_想学java,但是学历不是很高能学吗,

    活到老学到老,人最怕的是不学习. 人们往往在准备去学一个东西的时候,会有一些担心,比如难不难,能不能学会,或者就是学历不高能不能学会等等这些问题. 如果学java的话,学历高不高是其次.Java大家都 ...

  9. 逻辑思维不好能学java吗_逻辑思维差可以学JAVA吗

    逻辑思维就是练出来的,怎么练知道吗?学习编程的过程就是训练你逻辑思维最好最好的方法,慢慢来吧.在你思考的过程中,慢慢逻辑思维能力就有了,学java可以训练逻辑思维,这是反复迭代的过程.其实担心编程学不 ...

最新文章

  1. MFC UI按钮多线程
  2. html5跨域通讯之postMessage的用法
  3. 极限学习机和支持向量机_极限学习机I
  4. JMeter web 测试
  5. JS定时器使用,定时定点,固定时刻,循环执行
  6. 每日一题(24)—— const
  7. shell脚本if中判断大于、小于、等于、不等于的符号
  8. ajax页面载入动画,添加加载动画,jQuery的AJAX .load()
  9. 304441事务管理与并发控制
  10. 未来 10 年,物联网将成为主流!
  11. Linux下安装Python3.6(可用)
  12. 浅聊信创投资研究框架| 信创
  13. 易语言单窗口单ip软件源码_梦幻西游怎样多开ip转金?老玩家的十大转金秘籍奉上...
  14. 基于JAVA-公益劳动招募管理系统-计算机毕业设计源码+系统+mysql数据库+lw文档+部署
  15. windows系统TLQ8安装时提示载入java vm时windows出现错误
  16. 解决进入WindowsXP系统蓝屏提示“stop:0X0000007B
  17. ubuntu16 坚果云不能打开
  18. 弘辽电商主题四:淘宝店遇到恶意敲诈怎么办?客服应该如何应对?
  19. QT-简单的CNC控制面板
  20. ewebeditor***

热门文章

  1. 漫谈云数据中心的前世今生
  2. 图片存放在服务器还是数据库里的解释?
  3. 金蝶K/3产品性能稳定性优化指导手册
  4. mounted钩子函数_vue中created钩子函数与mounted钩子函数的使用区别
  5. 数据结构|连通图、完全图、无向图、有向图的边数计算问题
  6. 4.list和tuple的使用
  7. 评职称自费出书需要多长时间
  8. 经济危机会影响软件质量吗?
  9. 华里士公式(点火公式)与区间再现公式
  10. android手机到iphone6s,iPhone6s相当于现在什么档次的安卓手机?结果让国产手机品牌汗颜...