黑马程序员技术交流社区

标题: TreeMap中的第二种排序出现了问题 [打印本页]

作者: 大恶魔先森~    时间: 2014-5-28 10:16
标题: TreeMap中的第二种排序出现了问题
import java.util.*;
import java.util.Map.Entry;
public class TreeMapDemo
{
        public static void main(String args[])
        {
                TreeMap<Student,String> tm=new TreeMap<Student,String>();
                tm.put(new Student("lisi",20),"beijing");
                tm.put(new Student("zhangsan",19),"nanjing");
                Set<Map.Entry<Student,String>> entryset=tm.entrySet();
                Iterator<Map.Entry<Student,String>> it=entryset.iterator();
                while(it.hasNext())
                {
                        Map.Entry<Student,String> ms=it.next();
                        Student s= tm.getKey();
                        String add=tm.getValue();
                        System.out.println(s.getName()+"::"+s.getAge());
                }
        }
       
        /*public static void main(String args[])
        {
                TreeMap<Student,String> tm=new TreeMap<Student,String>();
                tm.put(new Student("lisi",20),"beijing");
                tm.put(new Student("zhangsan",19),"nanjing");
                tm.put(new Student("wangwu",20),"jiangxi");
                Set<Student> keyset=tm.keySet();
                Iterator<Student> it=keyset.iterator();
                while(it.hasNext())
                {
                        Student s=it.next();
                        System.out.println(s.getName()+"::"+s.getAge());
                }
        }
        */
       

}
class Student implements Comparable<Student>
{
        private String name;
        private int age;
        public Student(String name,int age)
        {
                this.name=name;
                this.age=age;
        }
        public String getName()
        {
                return name;
        }
        public int getAge()
        {
                return age;
        }
        public int compareTo(Student s)
        {
                int num=new Integer(this.age).compareTo(new Integer(s.age));
                if(num==0)
                        return new Integer(this.name.length()).compareTo(new Integer(s.name.length()));//名字按字符串长度来判断
                return num;
               
        }
       
       
}
发生了这两个错误The method getKey() is undefined for the type TreeMap<Student,String>
        The method getValue() is undefined for the type TreeMap<Student,String>

作者: ithmC4    时间: 2014-5-28 10:38
        public static void main(String args[])
         {
                 TreeMap<Student,String> tm=new TreeMap<Student,String>();
                 tm.put(new Student("lisi",20),"beijing");
                 tm.put(new Student("zhangsan",19),"nanjing");
                 Set<Map.Entry<Student,String>> entryset=tm.entrySet();
                 Iterator<Map.Entry<Student,String>> it=entryset.iterator();
                 while(it.hasNext())
                 {
                         Map.Entry<Student,String> ms=it.next();
////////////////////////////////////////////////////////////////////
                         Student s= ms.getKey();//①用ms②Entry的取出方法和TreeMap的取出方法不同的
                         String add=ms.getValue();//③你现在要搞明白为什么用Entry来迭代Map,感觉你还不明白这个
////////////////////////////////////////////////////////////////////
                         System.out.println(s.getName()+"::"+s.getAge());
                 }
         }
作者: pk49800    时间: 2014-5-28 14:26
  1. public class TreeMapDemo {
  2.        
  3.         public static void main(String args[])
  4.     {
  5.             TreeMap<Student,String> tm=new TreeMap<Student,String>();
  6.             tm.put(new Student("lisi",20),"beijing");
  7.             tm.put(new Student("zhangsan",19),"nanjing");
  8.             Set<Map.Entry<Student,String>> entryset=tm.entrySet();
  9.             Iterator<Map.Entry<Student,String>> it=entryset.iterator();
  10.             while(it.hasNext())
  11.             {
  12.                     Map.Entry<Student,String> ms=it.next();
  13.                     Student s= ms.getKey();//此處應該是ms而不是tm
  14.                    // String add=ms.getValue();
  15.                     System.out.println(s.getName()+"::"+s.getAge());
  16.             }
  17.     }
  18.    
  19.    
  20.    
  21. }
复制代码



作者: 海世山盟    时间: 2014-5-28 14:43
public class TreeMapDemo {
        
        public static void main(String args[])
    {
            TreeMap<Student,String> tm=new TreeMap<Student,String>();
            tm.put(new Student("lisi",20),"beijing");
            tm.put(new Student("zhangsan",19),"nanjing");
            Set<Map.Entry<Student,String>> entryset=tm.entrySet();
            Iterator<Map.Entry<Student,String>> it=entryset.iterator();
            while(it.hasNext())
            {
                    Map.Entry<Student,String> ms=it.next();
                    Student s= ms.getKey();//不应该是tm应该是ms tm是集合的数据,而ms才是迭代器的数据。迭代器是不能直接操作集合的内容的(ListIterator除外),如果直接操作会引起数据安全方面的影响。
                   // String add=ms.getValue();
                    System.out.println(s.getName()+"::"+s.getAge());
            }
    }
   
   
   
}
作者: yinxjfly    时间: 2014-5-28 20:41
entetyset和keyset虽然都是Set集合,但是内部存放的内容是不一样的,
前者存放的是键值对的关系,后者存放的是键
前者要获取其中的元素使用的是EntrySet特有的方法,(getKey();getValue()),而不是直接使用原MAP集合的方法。
而后者是使用MAP集合的方法通过key来获取值(getValue(key)).




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