黑马程序员技术交流社区
标题:
关于Collection.fill()方法覆盖集合部分元素的问题
[打印本页]
作者:
高波
时间:
2013-5-24 16:50
标题:
关于Collection.fill()方法覆盖集合部分元素的问题
本帖最后由 高波 于 2013-5-25 12:51 编辑
Question:
取出集合al的子集合subal,通过答应哈希值,发现哈希值不同,说明他们在内存中是两个独立的对象,当我调用subal的Collection.fill方法后,为什么原集合中的元素(subal部分)也跟着改变了?
import java.util.*;
class Test {
public static void main(String[] args) {
List<String> al = new ArrayList<String>();
al.add("abc01");
al.add("abc03");
al.add("abc08");
al.add("abc06");
al.add("abc05");
al.add("abc02");
al.add("abc07");
fillMethod(al, 3, 5);
}
public static void fillMethod(List<String> al, int start, int end) {
sop(al);
List<String> subal = al.subList(start, end);
Collections.fill(subal, "pp");
sop(subal);
sop(al);
sop(subal.hashCode());
sop(al.hashCode());
}
public static void sop(Object obj) {
System.out.println(obj);
}
}
复制代码
作者:
徐启坤
时间:
2013-5-24 16:56
列表也是引用型变量,subal和al是两个不同的引用,所以哈希值不同
但是subal指向的列表是al指向的列表的一部分,所以指向的是相同的列表元素
你改变了subal指向的元素,就相当于把al指向的元素也改变了
作者:
刘胜寒
时间:
2013-5-24 20:39
这是list集合。。。。。
我都无语了。。。。
作者:
刘胜寒
时间:
2013-5-24 20:43
哥们咋一看,还你为你是用hashSet呢。。。
作者:
高波
时间:
2013-5-25 08:23
刘胜寒 发表于 2013-5-24 20:43
哥们咋一看,还你为你是用hashSet呢。。。
大哥,啥意思啊,木有明白啊。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2