Set contains不是用你自已写的equels.他有自已的判断机制

解决方案 »

  1.   

    这么会是true呢???contains是意思是如果包含你传进去的对象,就返回true,否则false,你看你传进去的对象是什么:pt=new Person(1,"abc");,你先添加了这个对象的吗???能true吗???
    如果你没跟Person类定义比较地方法,那么它就调用Object地比较方法。
      

  2.   

    但我用Vector的时候是能返回true的啊,即根据我的equals方法判断是否相等,是不是Set和Vector的contains不一样?
      

  3.   

    我刚才又试了一下,只要把HashSet都改为Vector,返回的就是true了!
    到底是怎么回事啊??
      

  4.   

    Vector 是用equals()比较的,
    HashSet是用hashcode比较的
      

  5.   

    谢谢illyn帮我解决了这个问题,呵呵!《Effective Java》上也说过这个问题:
    “Item 8: Always override hashCode when you override equals”不过当时没有留意,以后不会再犯这个错误啦:D