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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一下是小弟写的Student类和关于对象的各种存储,请给位大牛给指点一下!
  1. <p>class Student implements Comparable<Student>
  2. {
  3.         private String name;
  4.         private int age;
  5.         private String num;
  6.         
  7.         public Student() {}
  8.         public Student(String name, int age, String num)
  9.         {
  10.                 this.name = name;
  11.                 this.age = age;
  12.                 this.num = num;
  13.         }
  14.         public void setName(String name)
  15.         {
  16.                 this.name = name;
  17.         }
  18.         public void setAge(int age)
  19.         {
  20.                 this.age = age;
  21.         }
  22.         public void setNum(String num)
  23.         {
  24.                 this.num = num;
  25.         }
  26.         public String getName()
  27.         {
  28.                 return name;
  29.         }
  30.         public int getAge()
  31.         {
  32.                 return age;
  33.         }
  34.         public String getNum()
  35.         {
  36.                 return num;
  37.         }
  38.         
  39.         public void show()
  40.         {
  41.                 System.out.println("name:"+name+"   age:"+age+"   num:"+num);
  42.         }
  43.         
  44.         public int hashCode()
  45.         {
  46.                 return num.hashCode();
  47.         }
  48.         
  49.         public boolean equals(Object obj)
  50.         {
  51.                 if(!(obj instanceof Student))
  52.                         throw new ClassCastException("不是Student类");
  53.                         
  54.                 Student s = (Student)obj;
  55.                 return this.getName().equals(s.getName())&&this.getAge() == s.getAge();
  56.         }
  57.         
  58.         public int compareTo(Student s)
  59.         {
  60.                 int n = this.getName().compareTo(s.getName());
  61.                 if(0 == n)
  62.                         return s.getAge() - this.getAge();
  63.                 return n;
  64.         }
  65. }



  66. </p><div class="blockcode"><blockquote>import java.util.*;

  67. class MyStudentTest
  68. {
  69.         public static void main(String []args)
  70.         {
  71.                 ArrayList <Student> al = new ArrayList<Student>();
  72.                
  73.                 al.add(new Student("bbb",13,"2001002"));
  74.                 al.add(new Student("ccc",15,"2001003"));
  75.                 al.add(new Student("aaa",12,"2001001"));
  76.                 al.add(new Student("ccc",18,"2001005"));
  77.                
  78.                 Iterator<Student> it = al.iterator();
  79.                
  80.                 while(it.hasNext())
  81.                 {
  82.                         it.next().show();
  83.                 }
  84.                
  85.                 LinkedList <Student> li = new LinkedList<Student>();
  86.                
  87.                 li.addFirst(new Student("孙悟空",11200,"2001011"));
  88.                 li.addLast(new Student("猪八戒",1300,"2001022"));
  89.                 li.addFirst(new Student("沙悟净",1400,"2001033"));
  90.                 li.addFirst(new Student("小白龙",13120,"2001007"));
  91.                
  92.                 Iterator <Student> it2 = li.iterator();
  93.                 while(it2.hasNext())
  94.                 {
  95.                         it2.next().show();
  96.                 }
  97.                
  98.                 HashSet <Student> hs = new HashSet<Student>();
  99.                
  100.                 hs.add(new Student("贾宝玉",20,"2002123"));
  101.                 hs.add(new Student("薛宝钗",19,"2002234"));
  102.                 hs.add(new Student("林黛玉",18,"2002345"));
  103.                 hs.add(new Student("王熙凤",20,"2002456"));
  104.                 hs.add(new Student("林黛玉",18,"2002345"));
  105.                
  106.                 Iterator<Student> it3 = hs.iterator();
  107.                 while(it3.hasNext())
  108.                 {
  109.                         it3.next().show();
  110.                 }
  111.                
  112.                
  113.                 TreeSet <Student> ts = new TreeSet<Student>();
  114.                
  115.                 ts.add(new Student("贾宝玉",20,"2002123"));
  116.                 ts.add(new Student("薛宝钗",19,"2002234"));
  117.                 ts.add(new Student("林黛玉",18,"2002345"));
  118.                 ts.add(new Student("王熙凤",20,"2002456"));
  119.                
  120.                 Iterator <Student>it4 = ts.iterator();
  121.                
  122.                 while(it4.hasNext())
  123.                 {
  124.                         it4.next().show();
  125.                 }
  126.   
  127.      
  128.     HashMap<String,Student> hm = new HashMap<String,Student>();
  129.    
  130.     hm.put("first",new Student("贾宝玉",20,"2002123"));
  131.     hm.put("second",new Student("薛宝钗",19,"2002234"));
  132.     hm.put("thrid",new Student("林黛玉",18,"2002345"));
  133.     hm.put("fouth",new Student("薛宝钗",19,"2002234"));
  134.         
  135.         
  136.           Set<String> set1 = hm.keySet();
  137.           Iterator <String> it5 = set1.iterator();
  138.           while(it5.hasNext())
  139.           {
  140.                   String key = it5.next();
  141.                   System.out.print(key+"...");
  142.                   hm.get(key).show();
  143.           }

  144.    Set<Map.Entry<String,Student>> set2 = hm.entrySet();
  145.    Iterator<Map.Entry<String,Student>> it6 =set2.iterator();
  146.    while(it6.hasNext())
  147.    {
  148.            Map.Entry<String,Student> me1 =it6.next();
  149.             System.out.print(me1.getKey()+"   ");
  150.             me1.getValue().show();
  151.    }

  152.    TreeMap <String, Student> tm = new TreeMap<String,Student>();
  153.     tm.put("first",new Student("贾宝玉",20,"2002123"));
  154.     tm.put("second",new Student("薛宝钗",19,"2002234"));
  155.     tm.put("thrid",new Student("林黛玉",18,"2002345"));
  156.     tm.put("fouth",new Student("薛宝钗",19,"2002234"));
  157.    
  158.     Set<String> set3 = tm.keySet();
  159.     Iterator<String> it7 = set3.iterator();
  160.     while(it7.hasNext())
  161.     {
  162.             String key = it7.next();
  163.             System.out.print(key+"   ");
  164.             tm.get(key).show();
  165.     }
  166.    
  167.     Set<Map.Entry<String,Student>> mapentry = tm.entrySet();
  168.     Iterator<Map.Entry<String,Student>> it8 = mapentry.iterator();
  169.     while(it2.hasNext())
  170.     {
  171.             Map.Entry<String,Student> me2 = it8.next();
  172.             System.out.print(me2.getKey()+"   ");
  173.             me2.getValue().show();
  174.     }
  175.         
  176.         }
  177.   
  178. }
复制代码

3 个回复

倒序浏览
不错,好多人我都不认识,你还知道他年龄编号啊{:soso_e106:}
回复 使用道具 举报
{:soso_e120:}
回复 使用道具 举报
指出错误的地方,hashCode方法你用的是系统默认的方法,这里就可以看出来是错了。学生中,如果出现了同名,同年龄的是否判断为同一个对象呢???
如果判断为同一个对象,那么这个hashCode却认为这两个对象是不同的,存入了集合中。由此出现了错误。
需要复写hashCode方法。
public int hashCode{
     return 1;//这里可以随意的写一个值,因为当判断到哈希值相同后,还要去判断equals方法,这样就可以确保对象的唯一性。
}

要保证自定义的类的对象的唯一性,需要复写hashCode方法和equals两个方法。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马