黑马程序员技术交流社区

标题: 关于HashSet集合排序重写的问题.. [打印本页]

作者: 折纸时代    时间: 2013-1-26 14:41
标题: 关于HashSet集合排序重写的问题..
本帖最后由 司懿卓 于 2013-1-26 15:12 编辑

先上代码:
  1. /*
  2. 需求: 根据集合元素内容来对元素进行排序
  3. 思路...
  4. */
  5. import java.util.*;
  6. class Person
  7. {
  8.         private String name;
  9.         private int age;
  10.         Person(String name, int age)
  11.         {
  12.                 this.name = name;
  13.                 this.age = age;
  14.         }
  15.         public String getName()                //getName
  16.         {
  17.                 return this.name;
  18.         }
  19.         public int getAge()                        //getAge
  20.         {
  21.                 return this.age;
  22.         }
  23.         public boolean equals(Object obj)                //重写equals
  24.         {
  25.                 if (this == obj)
  26.                         return true;
  27.                 if (obj != null && obj instanceof Person)        //比较对象内容
  28.                 {
  29.                         Person p1 = (Person)obj;
  30.                         if (p1.name == this.name)
  31.                                 return true;
  32.                         return false;
  33.                 }
  34.                 return false;
  35.         }
  36.         public int hashCode()                //重写hashCode
  37.         {
  38.                 return this.age;        
  39.         }
  40. }
  41. public class HashSetDemo
  42. {
  43.         public static void sop(Object obj)                //打印输出
  44.         {
  45.                 System.out.println(obj);
  46.         }
  47.         public static void main(String[] args)
  48.         {
  49.                 HashSet hs = new HashSet();
  50.                 hs.add(new Person("张三", 26));
  51.                 hs.add(new Person("李四", 19));
  52.                 hs.add(new Person("王五", 18));
  53.                 hs.add(new Person("李四", 20));

  54.                 for (Iterator it = hs.iterator(); it.hasNext(); )        //迭代器
  55.                 {
  56.                         Person p = (Person)it.next();
  57.                         sop("姓名:" + p.getName() + " 年龄:" + p.getAge());
  58.                         //sop(p.hashCode());
  59.                 }
  60.                
  61.         }
  62. }
复制代码
很是郁闷.
其他的看似一切都正常啊, 为什么我重写了hashCode方法后,返回age作为首选排序的条件.
可结果令人大吃一斤... 对,是一斤..  
上图!


求解惑~~~!

------------------------------------------------------------------------
自己的问题,已经解决.      
谢谢回复的朋友们..   
作者: 黄锦成    时间: 2013-1-26 14:50
从你题目看就知道有问题了!HashSet是无序的,TreeSet才是有序的。建议去看毕老师的视频,好好回顾一下
作者: 王晓斌    时间: 2013-1-26 14:55
楼主,hashset中的元素是无序的,它的底层结构是哈希表,里面元素不可以重复,而保证元素唯一性的依据就是你所重写的两个方法~~~先判断哈希值,相同的话再看equals~~~~
要想对元素进行排序的话,可以把元素放入treeset集合中~~~




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