黑马程序员技术交流社区

标题: 一个HashSet的原理问题 [打印本页]

作者: yogkin    时间: 2015-5-15 14:44
标题: 一个HashSet的原理问题
本帖最后由 yogkin 于 2015-5-15 15:27 编辑

package cn.itheima.HashSet;


import java.util.HashSet;
import java.util.Iterator;


/**
* 一个HashSet题
* @author czm
*
*/
class User{
String name;
String pssword;

public User(String name, String iD) {
this.name = name;
pssword= iD;
}

@Override
public int hashCode() {
return this.name.hashCode()+this.pssword.hashCode();
}

@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
User book = (User)obj;
return this.name.equals(book.name)&&this.pssword.equals(book.name);
}

@Override
public String toString() {
// TODO Auto-generated method stub
return "{用户名是:"+this.name+" 密码是:"+this.pssword+"}";
}
}
public class MyHashSet {
public static void main(String[] args) {
HashSet<User> set = new HashSet<User>();
set.add(new User("张三","123"));
set.add(new User("李四","234"));

Iterator<User> it = set.iterator();

while (it.hasNext()) {
User user = it.next();
if (user.name.equals("李四")) {
user.name = "赵六";
set.remove(user);          //@@@@
}
}
System.out.println(set);
}
}


输出的结果是:[{用户名是:张三 密码是:123}, {用户名是:赵六 密码是:234}]
那么问题就来了,@@@@的地方已经用了remove方法了,为什么会删除不了呢?如果明天还没有人回答正确,我就公布答案咯~
PS:昨天这文章发了好几次,都提示发不了,还说我存在攻击网站的行为,所有阻止我发帖,我晕!!!

作者: 赵旗    时间: 2015-5-15 16:45
user.name = "赵六"; 将迭代器中获取的"李四","234"对戏那个的name改为赵六
set.remove(user);  这个是删除容器里边的赵六 因为容器里边没有赵六所以删除失败
最后在将 user.name返回到容器中将李四替换
作者: yogkin    时间: 2015-5-16 13:38
本帖最后由 yogkin 于 2015-5-16 13:40 编辑
赵旗 发表于 2015-5-15 16:45
user.name = "赵六"; 将迭代器中获取的"李四","234"对戏那个的name改为赵六
set.remove(user);  这个是删除 ...
最后在将 user.name返回到容器中将李四替换?从哪返回?

作者: 陈明佳    时间: 2015-5-16 23:06
厉害啊,学习下,这里面看视频时都看不懂




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