TreeMap类不仅实现了Map接口,还实现了Map接口的子接口java.util.SortedMap。由TreeMap类实现的Map集合,不允许键对象为null,因为集合中的映射关系是根据键对象按照一定顺序排列的,TreeMap类通
使用TreeMap类
TreeMap 类不仅实现了Map接口,还实现了Map接口的子接口java.util.SortedMap。由TreeMap类实现的Map集合,不允许键对象为 null(注意和HashMap的区别),因为集合中的映射关系是根据键对象按照一定顺序排列的,TreeMap类通过实现SortedMap接口得到的方法如下所示。
方法名称 | 功能简介 |
comparator() | 获得对该集合采用的比较器,返回值为Comparator类型,如果未采用任何比较器则返回null |
firstKey() | 返回在集合中的排序位于第一位的键对象 |
lastKey() | 返回在集合中的排序位于最后一位的键对象 |
headMap(K toKey) | 截取在集合中的排序位于键对象toKey(不包含)之前的所有映射关系,重新生成一个SortedMap集合并返 回 |
subMap(K fromKey, K toKey) | 截取在集合中的排序位于键对象fromKey(包含)和toKey(不包含)之间的所有映射关系, 重新生成一个SortedMapJ集合并返回 |
tailMap(K fromKey) | 截取在集合中的排序位于键对象fromKey(包含)之后的所有映射关系,重新生成一个SortedMap集合并返回 |
在添加、删除和定位映射关系上,TreeMap类要比HashMap类的性能差一些,但是其中的映射关系具有一定的顺序,如果不需要一个有序的集合,则建议 使用HashMap类;如果需要进行有序的遍历输出,则建议使用TreeMap类,在这种情况下,可以先使用由HashMap类实现的Map集合,在需要 顺序输出时,再利用现有的HashMap类的实例,创建一个具有完全相同映射关系的TreeMap类型的实例,例如下面的例子。
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class CallBackTest2
{
public static void main(String[] args)
{
Map<Integer, String> hashmap = new HashMap<Integer, String>();
hashmap.put(56,"张三56");
hashmap.put(88,"小白88");
hashmap.put(75,"小黑75");
hashmap.put(66,"小兰66");
hashmap.put(98,"小锋98");
Set<Integer> keySet = hashmap.keySet();
System.out.println("HashMap全部的成绩为 :" + keySet);
System.out.print("HashMap学生信息 :");
for (Integer key : keySet )
{
System.out.print(hashmap.get(key)+" ");
}
System.out.println();
// Map<Integer, String> treemap = new TreeMap<Integer, String>(Collections.reverseOrder());
Map<Integer, String> treemap = new TreeMap<Integer, String>(new Comparator(){//不指定参数默认为升序
@Override//定义降叙排列
public int compare(Object o1, Object o2) {
if ((int)o1 > (int)o2){
return -1;
}
else if ((int)o1 < (int)o2){
return 1;
}
return 0;
}
<span style="color:#ff0000;"> //定义升叙排列
// public int compare(Object o1, Object o2) {
// if ((int)o1 < (int)o2){
// return -1;
// }
// else if ((int)o1 > (int)o2){
// return 1;
// }
// return 0;
// }
</span>
});
treemap.putAll(hashmap);
keySet = treemap.keySet();
//得到key set
System.out.println("TreeMap全部的成绩为 :" + keySet);
System.out.print("TreeMap学生信息 :");
for (Integer key : keySet )
{
System.out.print(treemap.get(key)+" ");
}
}
}