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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.util.*;
class Student implements Comparable<Student>
{
        private String name;
        private int age;
        Student(String name,String age)
        {
                this.name = name;
                this.age = age;
        }
        public int compareTo(Student s)
        {
                int num = new Integer(this.age).compareTo(s.name);
                return num;
        }
        public int hashCode()
        {
                return name.hashCode()+age*20;       
        }
        public boolean equals(Object obj)
        {
                if (!obj instanceof Student)
                {
                        throw new ClassCastException("leixingcuowu");
                        Student s = (Student)obj;
                        return this.name.equals(s.name) && this.age==s.age;
                }
        }
        public String getName()
        {
                return name;       
        }
        public int getAge()
        {
                return age;
        }
        public String toString()
        {
                return name+":"+age;
        }
}
class MapTest
{
        public static void main(String[] args)
        {
                HashMap<Student,String> hm = new Hash<Student,String>();
                hm.put(new Student("lisi1",21),"beijing");
                hm.put(new Student("lisi2",22),"beijing");
                hm.put(new Student("lisi3",23),"beijing");
                hm.put(new Student("lisi4",24),"beijing");
                Set<Student> keySet = hm.keySet();
                Iterator<Student> it = keySet.iterator();
                while (it.hasNext())
                {
                        Student stu = it.next();
                        String addr = hm.get(stu);
                        System.out.println(stu+"---"+addr);
                }
        }
}

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 淡定

查看全部评分

3 个回复

正序浏览
修改如下,有什么问题存在还可继续探讨。有错误和有点不适合的地方已经用注释标注。最后附上一张hash表的结构图(来自动力节点)。
  1. package com.sergio.Thread;

  2. /**
  3. * @ClassName: Test06
  4. * @Description: TODO(这里用一句话描述这个类的作用)
  5. * @author Sergio Han
  6. * @date 2013-8-11 下午4:16:06
  7. *
  8. */

  9. import java.util.*;

  10. class Student implements Comparable<Student> {
  11.         private String name;
  12.         private int age;

  13. //        Student(String name, int age) {
  14. //                this.name = name;
  15. //                this.age = age;
  16. //        }
  17.         //此处也是写错
  18.         Student(String name, int age)
  19.         {
  20.                 this.name = name;
  21.                 this.age = age;
  22.         }

  23. //        public int compareTo(Student s) {
  24. //                int num = new Integer(this.age).compareTo(s.name);
  25. //                return num;
  26. //        }       
  27.        
  28.         //此处写错了
  29.         public int compareTo(Student s)
  30.         {
  31.                 int num = new Integer(this.age).compareTo(s.age);
  32.                 return num;
  33.         }
  34.         public int hashCode() {
  35.                 //return name.hashCode() + age * 20;
  36.                 //此处写法的有点问题,估计是你还没明白hash表的结构。hahscode()这个相当于数组中的下标了,以那个参数选取hash值来悬挂数组中的位置
  37.                 return new String(name).hashCode();
  38.         }

  39. //         public boolean equals(Object obj)
  40. //     {
  41. //             if (!obj instanceof Student)
  42. //             {
  43. //                     throw new ClassCastException("leixingcuowu");
  44. //                     Student s = (Student)obj;
  45. //                     return this.name.equals(s.name) && this.age==s.age;
  46. //             }
  47. //     }
  48.        
  49.         //上面的写法有点问题,下面写法可参考。比较的变量是name,是age,自己修改即可
  50.         public boolean equals(Object o)
  51.         {
  52.                 if(o == this)
  53.                 {
  54.                         return true;
  55.                 }
  56.                 if(o instanceof Student)
  57.                 {
  58.                         Student s = (Student)o;
  59.                         if(this.name == s.name)
  60.                         {
  61.                                 return true;
  62.                         }
  63.                 }
  64.                 return false;               
  65.         }
  66.          
  67.          

  68.         public String getName() {
  69.                 return name;
  70.         }

  71.         public int getAge() {
  72.                 return age;
  73.         }

  74.         public String toString() {
  75.                 return name + ":" + age;
  76.         }
  77. }

  78. class Test06 {
  79.         public static void main(String[] args) {
  80.                 //后面的HashMap没有写全
  81. //                HashMap<Student, String> hm = new Hash<Student, String>();
  82.                 HashMap<Student, String> hm = new HashMap<Student, String>();
  83.                 hm.put(new Student("lisi1", 21), "beijing");
  84.                 hm.put(new Student("lisi2", 22), "beijing");
  85.                 hm.put(new Student("lisi3", 23), "beijing");
  86.                 hm.put(new Student("lisi4", 24), "beijing");
  87.                 Set<Student> keySet = hm.keySet();
  88.                 Iterator<Student> it = keySet.iterator();
  89.                 while (it.hasNext()) {
  90.                         Student stu = it.next();
  91.                         String addr = hm.get(stu);
  92.                         System.out.println(stu + "---" + addr);
  93.                 }
  94.         }
  95. }
复制代码
回复 使用道具 举报
代码最好用放在“<>”这个里边,方便别人复制,另外最好将错误信息贴出
还有一点建议就是,不要看到一大片错误就头懵,一个一个自己去找,收获会更大,找不出再来论坛求助会更好
回复 使用道具 举报
本帖最后由 狐灵 于 2013-8-11 11:20 编辑


        private String name;
        private int age;
       Student(String name,String age)
        {
                this.name = name;
                this.age = age;
        }
申明了一个int型的age,然后在构造方法中传进去一个String的age,报错:类型不兼容
②  
    public int compareTo(Student s)
        {
                int num = new Integer(this.age).compareTo(s.name);
                return num;
        }

Integer中有public int compareTo(Integer anotherInteger)方法, 你传一个String过去做参数,报错:无法将java.lang.Integer中的compareTo(java.lang.Integer)应用于java.lang.String.
话说拿age和name比较,这是要干什么呢?
③ HashMap<Student,String> hm = new Hash<Student,String>(); 有找不到Hash这个类,不应该报错么?
④ public boolean equals(Object obj)
        {
                if (!obj instanceof Student)
                {
                        throw new ClassCastException("leixingcuowu");
                        Student s = (Student)obj;
                        return this.name.equals(s.name) && this.age==s.age;
                }
        }
if (!obj instanceof Student)这个!直接就作用在obj上了,靠谱么?是不是应该给个括号~!?

评分

参与人数 1技术分 +2 收起 理由
神之梦 + 2 很给力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马