本帖最后由 韩松范 于 2013-3-8 00:43 编辑
String book = (String)it.next();
book只是一个局部变量,接收到的是集合中,元素的value,也就是一个字符串
所以改变book的值,根本不会影响集合中的元素。
如果想改变,只能先把“bbb”,在集合众删除,再在集合中添加“eee"
由于hashSet元素是无序的,且存放的为值由哈希值所决定,
所以"bbb",和”eee“存放的位置不同
代码如下
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
Collection books = new HashSet();
books.add("aaa");
books.add("bbb");
books.add("ccc");
books.add("ddd");
sop("原集合是:"+books);
Iterator it = books.iterator();
while(it.hasNext())
{
String book = (String)it.next();
sop(book);
if(book.equals("bbb"))
{
books.remove("bbb");
books.add("eee");
}
}
sop("遍历操作后的集合是:"+books);
}
打印结果:
原集合是:[aaa, ddd, ccc, bbb]
aaa
ddd
ccc
bbb
遍历操作后的集合是:[aaa, ddd, ccc, eee]//这里虽然eee被打印的顺序和bbb一样都是在最后,但是实际上由于它们的哈希值不同,所以存放位置不同。
|