黑马程序员技术交流社区

标题: 在学习Map时候遇到的问题 [打印本页]

作者: 凡延海    时间: 2012-5-29 21:54
标题: 在学习Map时候遇到的问题
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的自然排序是什么呢?
作者: 秦冲    时间: 2012-5-29 22:04
查看API文档可知——TreeMap该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。
那么再看你的键 是Integer类型的,接着继续查看API中的Integer中看到它实现了Comparable<Integer> ,复写了public int compareTo(Integer anotherInteger)。
看到没你的键已经有了排序了。会按照Integer的排序来排。
作者: 凡延海    时间: 2012-5-31 12:46
嗯,Set可以实现Comparator,排序。
作者: 黑马11期李项京    时间: 2012-5-31 13:08
HashMap<Integer,String>,map默认排序按照Key的类型类排,这里key的类型是Integer,所以.....
作者: 凡延海    时间: 2012-6-1 14:18
啊,为了这个问题我可是调了两三个小时都没有调试出来,原来这么是这个,悲惨啊。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2