黑马程序员技术交流社区

标题: 求指导!!! [打印本页]

作者: ShadowDancer    时间: 2015-2-2 13:03
标题: 求指导!!!

  1. <div class="blockcode"><blockquote>import java.util.*;

  2. class Student implements Comparable<Student>{
  3.         private String name;
  4.         private int age;
  5.         Student(String name, int age){
  6.                 this.name = name;
  7.                 this.age = age;
  8.         }
  9.         public int CompareTo(Student s){
  10.                 int num = new Integer(this.age).compareTo(new Integer(s.age));
  11.                 if(num == 0)
  12.                         return this.name.compareTo(s.name);
  13.                 return num;
  14.         }
  15.        
  16.         public int hashCode(){
  17.                 return name.hashCode()+age*34;
  18.         }
  19.         public boolean equals(Object obj){
  20.                 if(!(obj instanceof Student))
  21.                         throw new ClassCastException("类型不匹配");
  22.                 Student s = (Student)obj;
  23.                 return this.name.equals(s.name) &&this.age == s.age;
  24.         }       
  25.        
  26.         public String getName(){
  27.                 return name;
  28.         }
  29.         public int getAge(){
  30.                 return age;
  31.         }
  32.         public String toString(){
  33.                 return name+":"+age;
  34.         }
  35.         @Override
  36.         public int compareTo(Student o) {
  37.                 // TODO Auto-generated method stub
  38.                 return 0;
  39.         }
  40. }

  41. public class MapTest{
  42.         public static void main(String[] args){
  43.                 HashMap<Student,String> hm = new HashMap<Student,String>();
  44.                
  45.                 hm.put(new Student("lisi",21),"beijing");
  46.                 hm.put(new Student("lisi",21),"tianjin");
  47.                 hm.put(new Student("lisi2",22),"shanghai");
  48.                 hm.put(new Student("lisi3",23),"nanjing");
  49.                 hm.put(new Student("lisi4",24),"shenyang");
  50.                
  51.                 //第一种取出方式  keySet
  52.                
  53.                 Set<Student> keySet = hm.keySet();
  54.                 Iterator<Student> it = keySet.iterator();
  55.                
  56.                 while(it.hasNext()){
  57.                         Student stu = it.next();
  58.                         String addr = hm.get(stu);
  59.                         System.out.println(stu+".."+addr);
  60.                 }
  61.                
  62.                 //第二种取出方式 entrySet
  63.                 Set<Map.Entry<Student,String>> entrySet = hm.entrySet();
  64.                 Iterator<Map.Entry<Student,String>> iter  = entrySet.iterator();
  65.                
  66.                 while(it.hasNext()){
  67.                         Map.Entry<Student,String> me = iter.next();
  68.                         Student stu = me.getKey();
  69.                         String addr = me.getValue();
  70.                         System.out.println(stu+"....."+addr);
  71.                 }
  72.         }
  73. }
复制代码




作者: ShadowDancer    时间: 2015-2-2 13:05
不是已经复写 public int compareTo()方法了吗?
为什么还要复写一次啊???
作者: 再見螢火蟲    时间: 2015-2-5 10:23
Comparator的使用:强行对某个对象 collection 进行整体排序,而集合里的对象可以是没有实现Comparable接口的对象,也可以是实现了Comparable接口的对象,使用这个排序器可以改变默认的排序时使用比较大小的方法,这时候底层进行排序就不再是用默认的自然排序,在底层对集合进行排序将不再是用Arrays.mergeSort(Object[] src,Object[] dest,int low,int high,int off),而是是用Arrays.mergeSort(Object[] src,Object[] dest,int low,int high,int off,Comparator c),比较大小则是用了c.compare(dest[j-1], dest[j])。




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