文档章节

java treeMap信息

鸡蛋炒馒头
 鸡蛋炒馒头
发布于 2016/11/14 21:10
字数 397
阅读 17
收藏 0

最新看啦一篇文章,深有感触,所以又吧treeMap细节重新学习啦一下!

treeMap本身就是默认排序的!他是添加内容的时候进行排序的;

 return comparator==null ? ((Comparable<? super K>)k1).compareTo((K)k2)
            : comparator.compare((K)k1, (K)k2);
Comparable<? super K> k = (Comparable<? super K>) key;

comparator表示传递是否传递 排序对象;

默认按照的是asc码值进行排序的!如果传递自定义的Comparator,则按照自定义进行排序;

一 treeMap是二叉树排序的 详情看:http://www.cnblogs.com/chenssy/p/3746600.html

二 treeMap 排序的时候可以 舍去 大小写,按照正常的排序:

Map<String, String> map = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
map.put("a", "abstract1");
map.put("b", "abstract2");
map.put("a", "abstract4");
map.put("A", "abstract3");

//key:a= value:abstract3
//key:b= value:abstract2

    出现这个情况的原因是源码中的[每次如果他的key比较为0的时候都会把value进行替换,因为忽律啦大小写,所以会出现这个结果]:

Comparable<? super K> k = (Comparable<? super K>) key;
do {
  parent = t;
  cmp = k.compareTo(t.key);
  if (cmp < 0)
     t = t.left;
  else if (cmp > 0)
     t = t.right;
  else
     return t.setValue(value);
} while (t != null);

日期例子:

Map<String, Integer> map = new TreeMap<String, Integer>(new Comparator<String>() {

		public int compare(String o1, String o2) {
			SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
			try {
				return sdf.parse(o1).compareTo(sdf.parse(o2));
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			return 0;
		}
	});
map.put("2016-7-3", 100);
map.put("2016-7-10", 120);
map.put("2016-8-1", 90);

//注:此处的返回值不能用 return (int)(sdf.parse(o1).getTime() - sdf.parse(o2).getTime()) 
//因为 sdf.parse(o1).getTime返回的是long类型,long类型转换int会出现截取!导致数值不正确,正确方式可以参考
//Date.java中的compareTo方法

 

© 著作权归作者所有

鸡蛋炒馒头
粉丝 2
博文 34
码字总数 12765
作品 0
浦东
后端工程师
私信 提问
再谈Java数据结构—分析底层实现与应用注意事项

在回顾js数据结构,写《再谈js对象数据结构底层实现原理-object array map set》系列的时候,在来整理下java的数据结构。 java把内存分两种:一种是栈内存,另一种是堆内存 基本类型在栈区分...

zhoulujun
05/17
0
0
图说 Java:理解 Java 机制最受欢迎的 8 幅图

世间总是一图胜过千万言,下面的8幅图来自于 Program Creek 的 Java教程 ,目前这是该网站最受欢迎的文章. 希望本文能帮你回顾你已经知道的那些知识。如果图片讲解的不够清晰,你可能需要阅读详...

大数据之路
2013/10/30
0
3
Java 根据 Map 中的 values 进行排序

Map 是 Java 中关于 key-value 形式的一种数据结构。根据不同 Map 的实现类,有如 HashMap 和 TreeMap ,它们都会对容器中的数据进行排序,而这些排序都是针对于 key 的排序,例如 HashMap ...

红薯
2009/11/24
4K
1
泥沙砖瓦浆木匠/java-core-learning-example

感谢赞助的ta们 Java 核心系列教程,关于Java核心技术学习积累的例子,是初学者及核心技术巩固的最佳实践。 包括基础语法,OOP,字符串,集合,IO,反射,线程,网络等。 未完成模块:阿里J...

泥沙砖瓦浆木匠
04/02
0
0
Java核心(四)你不知道的数据集合

导读:Map竟然不属于Java集合框架的子集?队列也和List一样属于集合的三大子集之一?更有队列的正确使用姿势,一起来看吧! Java中的集合通常指的是Collection下的三个集合框架List、Set、Q...

王磊的博客
2018/11/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

二、Docker

1、Docker - The TLDR(Too Long,Don't Read,Linxu 终端工具 ) Docker是在Linux和Windows上运行的软件。它创建、管理和编排容器。该软件以开源方式开发,在Github上作为Moby开源项目的一部分。...

倪伟伟
21分钟前
2
0
Python猫荐书系列之七:Python入门书籍有哪些?

本文原创并首发于公众号【Python猫】,未经授权,请勿转载。 原文地址:https://mp.weixin.qq.com/s/ArN-6mLPzPT8Zoq0Na_tsg 最近,猫哥的 Python 技术学习群里进来了几位比较特殊的同学:一...

豌豆花下猫
今天
5
0
Guava RateLimiter限流源码解析和实例应用

在开发高并发系统时有三把利器用来保护系统:缓存、降级和限流 缓存 缓存的目的是提升系统访问速度和增大系统处理容量 降级 降级是当服务出现问题或者影响到核心流程时,需要暂时屏蔽掉,待高...

算法之名
今天
13
0
国产达梦数据库与MySQL的区别

背景 由于项目上的需要,把项目实现国产化,把底层的MySQL数据库替换为国产的达梦数据库,花了一周的时间研究了国产的数据库-达梦数据库,它和MySQL有一定的区别,SQL的写法也有一些区别。 ...

TSMYK
今天
2
0
老也有错?35岁程序员是一道坎,横亘在每个技术职场人的心中

随着互联网的高速发展变革,大龄恐惧症越来越多地在技术圈被人讨论。很多程序员在工作5-10年以后,都会开始思考5年、10年甚至更久以后的自己,会是怎样一种生活工作状态,以及是否会被时代抛...

我最喜欢三大框架
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部