/*
2012年12月1日12:47:58
*/
import java.util.*;
public class TestValue
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
//定义一个容器,用来存放元素
TreeMap<String,Integer> map = new TreeMap<String,Integer>(new ValueComparator());
map.put("a",4); //比较器类型是K及其父类
map.put("b",2);
map.put("c",6);
map.put("d",3);
//取出键值的映射关系存入Set集合中
Set<Map.Entry<String,Integer>> entrySet = map.entrySet();
//产生迭代器(Map集合没有迭代器,只能通过List 或Set集合产生)
Iterator<Map.Entry<String,Integer>> it = entrySet.iterator();
//开始迭代元素
while (it.hasNext())
{
Map.Entry<String,Integer> me = it.next();//迭代出的是映射关系,所以me的参数类型是Map.Entry
Integer value = me.getValue();//通过迭代出的映射关系,调用Map.Entry中的getValue方法.得到值(V)
sop(value);
}
}
}
//重写比较器
class ValueComparator implements Comparator<String>
{
public int compare(String a1,String a2)
{
Integer num = a2.compareTo(a1);
return num;
}
}
/*class ValueComparator implements Comparator<Integer>
{
public int compare(Integer a1,Integer a2)
{
Integer num = a2.compareTo(a1);
return num;
}
}
这里为什么被注释了?我查看了下API:
public TreeMap(Comparator<? super K> comparator)
K - 此映射维护的键的类型
我个人的理解:比较器的类型是键的类型及其父类.
*/
最后写个小结:都是个人理解,有的地方不对,还望大神指出
你希望排列Value.我的思路是,先把一组元素存入TreeMap中,存的时候TreeMap会调用
自身的比较器:按键(K)类型自然排序即(a,b,c,d).但是你希望按Value排序,我想重写
比较器,查看文档发现比较器类型是K及其父类.也就是说你不可能在现有TreeMap结构
下去比较Value.
我本打算把Value再存入一个集合中,完成排序.最后没这么做.我个人的看法是,Map这个集合
到底是干什么用的?它是一种映射关系,你排了key,对应的value也就排列了.它提供的比较器就可以看出
,排好键就行了,再去动Value其实际意义再哪了,对于这样一种映射关系?如果你想排数字,你大可把数字放到
Key的位置上,即把要排的放到Key上就好了.个人愚见.
|