个人分析:你的代码出现这样的结果是因为s1的name值被你改了,但是s1在Set内部桶的位置并没有改变,所以你遍历这个Set可以得到最新的值。但是,既然你改了s1的name属性值,因此s1的hashcode变了,如果你想删除这个s1也就删不掉了,这是应该就发生了内存泄露,具体表现就是你remove(s1)之后,这个Set的大小应该还是3。