今儿来说说treeMap吧
来源:互联网 发布:大智慧交易软件 编辑:程序博客网 时间:2024/05/17 23:51
TreeMap不仅实现了Map接口,还实现了Map接口的子接口java.util.SortedMap,由treeMap实现的map集合,不允许key值为null,因为集合中的映像关系是按照key来按一定顺序排列的,treeMap通过实现SortedMap得到下面几个方法:
public static voidmain(String[] args) {
//不指定排序器 TreeMap treeMap1 = new TreeMap(); treeMap1.put("2", "1"); treeMap1.put("b", "1"); treeMap1.put("1", "1"); treeMap1.put("a", "1"); System.out.println("treeMap1="+treeMap1);
//指定排序器 TreeMap treeMap2 = new TreeMap(newComparator(){
public intcompare(String o1, String o2) {
//指定排序器按照降序排列 returno2.compareTo(o1); } }); treeMap2.put("2", "1"); treeMap2.put("b", "1"); treeMap2.put("1", "1"); treeMap2.put("a", "1"); System.out.println("treeMap2="+treeMap2); }
comparator:获得该集合采用的比较器,返回类型为Comparator,没有则返回null;
fisrtkey:返回排序位于第一位的key对象
lastkey:返回集合中位于最后一位的key对象
headKey(KtoKey):截取集合中在toKey对象之前的(不包含)所有的映射关系,重新生成一个SortedMap并返回
subKey(K fromKey,KtoKey):截取集合中排序位于fromKey(包含)和toKey(不包含)的所有映像关系,重新生成一个SortedMap并返回
tailKey(KfromKey):截取集合中排序位于fromKey(包含)以后的所有映像关系,重新生成一个SortedMap返回
在添加,删除,定位映像关系上treeMap要比hashMap差些,但其映像关系有一定的顺序,就看你在什么语境下使用了,有排序需求是treeMap自然要好些
TreeMap是基于红黑树的,至于红黑树是什么,自行补脑,查看key或(key,value)时会排序的(次序由Comparable或Comparator决定),他的特点就是得到的结果是经过排序的,treeMap是唯一一个带有subMap()的map,返回一个子树。
Comparable接口:
- public interface Comparable{
-
public int compareTo(To) - }
Comparator接口:
- public interface Comparator {
- int compare(T o1, T o2);
- boolean equals(Objectobject);
- }
这里要注意的是TreeMap按照key来排序,所以put进来重复的key,那么直接替换掉old value,并返回oldvalue
- public V setValue(V value){
-
V oldValue =this.value; -
this.value =value; -
return oldValue; -
}
这里要说明一点TreeSet(前面有一个Qunar大连的笔试题的例子),treeSet的tree中的值改变之后并不会重新排序,在这里排序是按照key来排序的,value改变后所以直接替换点value,tree并不需要重新排序的
TreeMap还继承了NavigableMap,NavigableMap拓展的SortedMap具有针对给定目标返回最接近匹配项的方法。方法lowerEntry、floorEntry、ceilingEntry和higherEntry分别返回与小于、小于等于、大于等于、大于给定键的键关联的Map.Entry对象,如果不存在这样的键,则返回null。类似地,方法lowerKey、floorKey、ceilingKey和higherKey只返回关联的键,这些方法都是查找操作。
至于这课红黑树的构造和添加删除操作,我艹,代码量太大了,懒得贴了,上述就是一些treeMap的我觉得有用的tips 不对的请指正!!
贴一段按照key来排序的代码
import java.util.Comparator;
import java.util.TreeMap;
public class TestTreeMap {
}
}
妈蛋 新浪blog不会贴源码,最下面那个大概意思对,但它一些参数去除了,凑合看吧 我去学学怎么贴源码
0 0
- 今儿来说说treeMap吧
- 来说说validform吧
- 20120519---来说说调试吧
- 也来说说“忠”
- 来说说enterprise library
- 也来说说厕所
- 大家来说说大盘
- 大家来说说大盘
- 大家来说说鞍钢
- 也来说说全局变量
- 大家来说说SEO
- 来说说二分查找
- 也来说说心灵鸡汤
- 也来说说全局变量
- 大家都来说说自己调试程序的方法吧!
- 大家来说说自己最喜欢的电影或电视剧吧!
- 来说一说Qt下OC与C++混编吧!!!
- 我们来说说ABBYY Hot Folder的用途吧
- 保存SessionID的几种方式
- 通过出勤日志找出最有可能是情侣的…
- 复习一下hashMap
- Qunar大连开发笔试第3题解法
- TCP和UDP的区别以及socket的链接
- 今儿来说说treeMap吧
- StringBuilder字符串缓冲区
- 工厂模式跟策略模式的区别
- dedecms5.7文章内容页调用tag关键词并增加超链接的方法
- Qt中信号与槽的简单代码片段示例
- 小珂的苦恼
- 集合
- Grunt:任务自动管理工具
- 缓存逻辑---Allocations定位内存常驻时不要踩的坑