A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 凡延海 中级黑马   /  2012-5-29 21:54  /  2029 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public class TestMap {
public static void main(String[] args) {
  HashMap<Integer,String> maps=new HashMap<Integer,String>();
  maps.put(1,"Tom" );
  maps.put(2,"LiLy" );
  maps.put(12,"Lucy");
  maps.put(10,"Tom");
  maps.put(6,"Jim" );
  maps.put(5,"Jim");
  Set<Map.Entry<Integer,String>> entrys=maps.entrySet();
  TreeMap<Integer,String> treeMap= new TreeMap<Integer,String>(maps);
  Set<Map.Entry<Integer,String>> treeEntrys=treeMap.entrySet();
  for(Map.Entry<Integer,String> entry:entrys)
  {
   System.out.println(entry.getKey()+":"+entry.getValue());
  }
我这个程序运行的结果是:
1:Tom
2:LiLy
5:Jim
6:Jim
10:Tom
12:Lucy
我感觉很奇怪,是谁给排的序呢,我打算用TreeMap来对键值集进行排序呢,那个给排好了,就不用TreeMap来做了。那TreeMap的自然排序是什么呢?

4 个回复

倒序浏览
查看API文档可知——TreeMap该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
那么再看你的键 是Integer类型的,接着继续查看API中的Integer中看到它实现了Comparable<Integer> ,复写了public int compareTo(Integer anotherInteger)。
看到没你的键已经有了排序了。会按照Integer的排序来排。
回复 使用道具 举报
嗯,Set可以实现Comparator,排序。
回复 使用道具 举报
HashMap<Integer,String>,map默认排序按照Key的类型类排,这里key的类型是Integer,所以.....
回复 使用道具 举报
啊,为了这个问题我可是调了两三个小时都没有调试出来,原来这么是这个,悲惨啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马