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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ShadowDancer 中级黑马   /  2015-2-2 13:03  /  1003 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  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. }
复制代码



2 个回复

倒序浏览
不是已经复写 public int compareTo()方法了吗?
为什么还要复写一次啊???
回复 使用道具 举报
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])。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马