放入Set集合中的对象必须重写equals()方法。及重写hashCode()方法,会提高性能。这二点,能举一个例子吗,感谢

解决方案 »

  1.   

    重写equals()方法,及重写hashCode()方法,不会提高性能。相反,重写hashCode()方法不得当会降低性能。容器的机制请您鉴赏:http://blog.csdn.net/I_Believe_/archive/2005/11/02/521262.aspx估计以后没时间写出这么细心的文章了。
      

  2.   

    因为Set是不重复的,所以equals是必须的,让容器知道什么是重复的
    hashCode是必须的,当用到HashSet的时候,因为HashSet就是根据hashCode来存放的,这种东西不用别人给你代码,你自己试试不就知道了,给你代码又能怎么样,一个有或没有equals的class的实例存入一个Set你能看到效果?
      

  3.   

    hashCode根数据库索引的功能有些类似
    重写hashCode()的思想往往就是使hashCode得值离散分布
    打个比方 一个班的学生住在旅馆里 
    你的目的是找快速找到一个名字叫做A的学生 需要知道 学生的名字和他所住的房间的门牌号 
    这里学生是对象   门牌号是hashcode
    如果不重写hashCode()就好像你不知道门牌号 只能挨个房间找名字叫A的学生
    如果重写hashCode()但是对象的hashcode分布不是很离散  那么就好像  每房间里都住了好几个学生  你知道了门牌号也要挨个问这几个人 "你是不是叫做A?"才能找到
    如果重写hashCode()并且使用让hashcode离散分布的算法 那么就好像每个房间都只住了一个学生
    知道了学生名字和房间号 一下子就找到了程序性能就是如此提高滴
      

  4.   

    有一点说错了
    不重写hashCode()就是所有人都在一个房间里 ...
      

  5.   

    Set和hashCode本身没有关系
    重写equals也不是为了提高性能
    hashCode只是和哈西表这种数据结构有关系