使用Iterator来遍历Collection集合里的元素,到底能否改变元素的值? 本帖最后由 menglibinghe 于 2014-12-17 17:35:49 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 set 本来就是没有顺序的啊。 你试试arrayList就有顺序了 1.HashSet hs = new HashSet(); 是HashSet,底层是HashMap,不是TreeSet。hash码本身就是无序的,底层由分组实现,无序排列。TreeSet是有序的,底层TreeMap实现。建议深入了解Object的hashcode。2.关于值改变。(Iterator并不是把集合元素本身传递给了迭代变量,而是把集合元素的值①传递给了迭代变量,),这里的值并不是Map的value,而是Map里对象的引用地址的意思,你想一下,把地址给你了,你根据地址找到那个对象并修改的对象的属性,而Map中依旧存放的是引用地址,所以Map盛放的对象就变喽 如果按照三楼的说法: 关于值改变。(Iterator并不是把集合元素本身传递给了迭代变量,而是把集合元素的值①传递给了迭代变量) 那么一楼代码中也是使用Iterator,为什么修改first的属性导致集合里面的元素值也发生了改变呢?(我的问题主要是针对使用HashSet类) R first = (R)it.next();first是啥?是内存中R对象的引用,这个引用指向了内存中的对象,通过它肯定可以改变这个对象内部的数据。只不过,first本身的值是不变的,因为这个值是地址(即引用) 你hs集合中put了四个R的实例,而内存中的存放形式是hs集合存放了四个指向R对象的内存地址,进行iterator遍历时根据地址拿到对象,并对对象的count属性进行了修改,而集合中仍然存放的是指向R对象的地址,地址没有变,变的是地址指向的对象。不知道这样说能明白了吗 关于IO和NIO 关于Map结构的调整计算问题 求高手们帮忙,谢谢各位了! 问一个巨简单的数组定义和赋值的问题. 这两种环境设置的方法有什么异同? ----怎样屏蔽最小化按钮----- 如何取“数组中的根元素”? 目录树 关于junit,structs,ant的相关问题。 Swing中JTable控件的问题! java正则问题求救 RandomAccessFile 传输文件时出错
2.关于值改变。(Iterator并不是把集合元素本身传递给了迭代变量,而是把集合元素的值①传递给了迭代变量,),这里的值并不是Map的value,而是Map里对象的引用地址的意思,你想一下,把地址给你了,你根据地址找到那个对象并修改的对象的属性,而Map中依旧存放的是引用地址,所以Map盛放的对象就变喽
关于值改变。(Iterator并不是把集合元素本身传递给了迭代变量,而是把集合元素的值①传递给了迭代变量)
那么一楼代码中也是使用Iterator,为什么修改first的属性导致集合里面的元素值也发生了改变呢?(我的问题主要是针对使用HashSet类)
R first = (R)it.next();first是啥?是内存中R对象的引用,这个引用指向了内存中的对象,通过它肯定可以改变这个对象内部的数据。只不过,first本身的值是不变的,因为这个值是地址(即引用)