解决方案 »

  1.   

    TreeMap都是通过compare的
    1 对整个TreeMap(在构造函数)提供Comparator;或者
    2 所有的Key都是Comparable的被你注释掉的那个方法:
    TreeMap<Student,String> tm = new TreeMap<Student,String>(new LenComparator());
    用的是方法1,即优先使用comparator,即使Key也是Comparable的由于你最终的代码,没有提供Comparator,还好Student还是Comparable的
    所以TreeMap使用了方法2@see java.util.TreeMap.put(K, V)
    @see java.util.TreeMap.compare(Object, Object)
      

  2.   

    ok..
    但是 public int compareTo(Student s) {
    // TODO Auto-generated method stub
    // System.out.println(this.getName()+"equals  "+s.getName());
    // int num = new Integer(this.getAge()).compareTo(s.getAge());
    // if(num == 0)
    // return new Integer(this.getName().length()).compareTo(s.getName().length());
    // return num;
    return 1;
    }我让它 返回1,为什么打印的结果value全部为null值啊。
      

  3.   

    全是1的话,当然找不到@see java.util.TreeMap.getEntry(Object)全是1,他遍历树的时候,会发现要找的Key比当前这个节点的Key大,应该去右面的子节点去试试运气。但是发现自己还是大,周而复始,遍历完了,还是没找到 compare结果 = 0的。所以返回null
      

  4.   

    不是键覆盖了,只是将值给覆盖了,你put同一个键的时候,接收到返回的数值是上一个与该键相关联的值.TreeMap通过键对象自身实现了自然排序(即实现了Comparable接口),然后根据实现的compareTo方法的返回值来确定唯一性以及排序性,至于将实现方法全部返回为1,楼上哥们也说清楚了,楼主想弄明白为什么会这样,就用断点查看把,看一下就清楚为什么返回的是null了