SortedMap接口的实现类TreeMap介绍和实现Comparator自定义比较器(转)
与SortedSet接口类似,SortedMap也是一个结构,待排序的Map,其一个比较常用的实现类是TreeMap。
TreeMap的put(K key, V value)方法在每添加一个元素时,都会自动排序。
TreeMap()
使用键的自然顺序构造一个新的、空的树映射。
TreeMap(Comparator<? super K> comparator)
构造一个新的、空的树映射,该映射根据给定比较器进行排序。
TreeMap(Map<? extends K,? extends V> m)
构造一个与给定映射具有相同映射关系的新的树映射,该映射根据其键的自然顺序 进行排序。
创建自定义的Comparator比较器:

//这里根据字符的ASCII码大小进行降序排序:
class MyComparator2 implements Comparator<String>{
@Override
public int compare(String o1, String o2) { return o2.compareTo(o1);
}
}

在SortedSet中,当保存对象时一定要自定义一个比较器Comparator,但是在SortedMap中,保存对象却不一定要,因为 SortedMap是比较Key而不是Value,所以创建的自定义比较器也是针对Key的,比如上面创建的Comparator是针对Key类型为 String的Map进行排序。
Map<String, String> map = new TreeMap<String, String>(new MyComparator2());
对于TreeMap的迭代和HashMap一样,同样有三种方法,以下是常用的其中一种:

Set<Map.Entry<Integer, Integer>> set = map.entrySet();
for(Iterator<Map.Entry<Integer, Integer>> iter = set.iterator(); iter.hasNext();){
Map.Entry<Integer, Integer> entry = iter.next();
Integer key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key + ":" + value);
}

对于Map来说,不能使用Collections的静态方法,但是可以通过他的values方法获取到Collections进行调用:
Collection<Integer> cols = map.values();
Integer max = Collections.max(cols);
本文链接:http://www.itzhai.com/treemap-sortedmap-interface-implementation-class-introduction-and-implementation-of-custom-comparator-comparator.html
SortedMap接口的实现类TreeMap介绍和实现Comparator自定义比较器(转)的更多相关文章
- Java 数据类型:集合接口Map:HashTable;HashMap;IdentityHashMap;LinkedHashMap;Properties类读取配置文件;SortedMap接口和TreeMap实现类:【线程安全的ConcurrentHashMap】
Map集合java.util.Map Map用于保存具有映射关系的数据,因此Map集合里保存着两个值,一个是用于保存Map里的key,另外一组值用于保存Map里的value.key和value都可以是 ...
- Map接口,Map.Entry,hashMap类,TreeMap类,WeakHashMap。
Collection接口之前接触过,每次保存的对象是一个对象,但是在map中保存的是一对对象,是以key->value形式保存的. 定义: public interface Map<K,V ...
- Java基础 - Map接口的实现类 : HashedMap / LinkedHashMap /TreeMap 的构造/修改/遍历/ 集合视图方法/双向迭代输出
Map笔记: import java.util.*; /**一:Collection接口的 * Map接口: HashMap(主要实现类) : HashedMap / LinkedHashMap /T ...
- java集合框架部分相关接口与类的介绍
集合基础 接口 Iterable //Implementing this interface allows an object to be the target of the "for-ea ...
- java常用类详细介绍及总结:字符串相关类、日期时间API、比较器接口、System、Math、BigInteger与BigDecimal
一.字符串相关的类 1.String及常用方法 1.1 String的特性 String:字符串,使用一对""引起来表示. String声明为final的,不可被继承 String ...
- java集合系列——Map之TreeMap介绍(九)
一.TreeMap的简介 TreeMap是一个有序的key-value集合,基于红黑树(Red-Black tree)的 NavigableMap实现.该映射根据其键的自然顺序进行排序,或者根据创建映 ...
- SortedMap接口:进行排序操作。
回顾:SortedSet是TreeSet的实现接口,此接口可以排序. SortedMap接口同样可以排序,是TreeMap的实现接口,父类. 定义如下: public class TreeMap< ...
- SortedMap接口
SortedMap接口是排序接口,只要是实现了此接口的子类,都属于排序的子类,TreeMap也是此接口的一个子类. import java.util.Map; import java.util.Sor ...
- Map接口常用实现类学习
HashMap 1.6的HashMap:数组加单向链表结构 最重要的内部类Entry,全类名是java.util.HashMap.Entry,是个静态类,实现了Map.Entry接口.HashMap. ...
随机推荐
- UILabel顶部对齐解决方法(转载)
问题 我有一个UILabel高度最多能显示两行,如果里面内容只有一行,它是垂直居中的.怎么能让它顶端对齐呢? 回答 答案1:用sizeToFit改变UILabel的高度 nevan king,19 ...
- PagerHelper-分页类
2016.01.29 public static class PagerHelper { #region 数字分页类 /// <summary> /// /// </summar ...
- zepto阻止事件冒泡
$("#model_frame").on("click",function(){ $(this).hide(); console.log($(this)); } ...
- vue 滚动加载
<template> <div class="wraper" @scroll="onScroll($event)"> <div c ...
- android中常用的读取文件的用法如下
1. 从resource的raw中读取文件数据: String res = ""; try{ //得到资源中的Raw数据流 InputStream in = getResource ...
- 离线安装 Cloudera ( CDH 5.x )
要配置生产环境前,最好严格按照官方文档/说明配置环境.比如,官方说这个安装包用于RETHAT6, CENTOS6,那就要装到6的版本下,不然很容易出现各种各样的错. 配置这个CDH5我入了很多坑,最重 ...
- 使用LocalBroadcastManager
Android中BroadcastReceiver主要用途有 发送通知,更新UI或者数据,应用程序间相互通信,监听系统状态(比如开机,网络等) Android中BroadcasetReceiver的注 ...
- MvvmLight ToolKit .Net4.5版本 CanExecute不能刷新界面bug
一 问题重现 1.在使用最新版本v5.1的MvvmLight中(其实这个问题很早就有了),发现CanExecute不能很好地工作了.一个简单的工程,只有MainWindow和MainWindow ...
- python网络编程学习《一》
最近,刚实习完,很喜欢实验楼,但是自己的方向仍然不能确定,自己觉得可选择的空间很大,尽管已经是大四的人了,想到别人都在忙着买职业装,买高跟鞋面试,学习化妆什么的,看看自己,反而开始慢慢关注运动,食疗以 ...
- MySQL for mac使用记录
一.登录 打开终端,输入/usr/local/mysql/bin/mysql -u root -p 初次进入mysql,密码为空.当出现mysql>提示符时,表示你已经进入mysql中.键入ex ...