A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 高波 于 2013-5-25 12:51 编辑

Question:
取出集合al的子集合subal,通过答应哈希值,发现哈希值不同,说明他们在内存中是两个独立的对象,当我调用subal的Collection.fill方法后,为什么原集合中的元素(subal部分)也跟着改变了?
  1. import java.util.*;

  2. class Test {
  3.         public static void main(String[] args) {
  4.                 List<String> al = new ArrayList<String>();
  5.                 al.add("abc01");
  6.                 al.add("abc03");
  7.                 al.add("abc08");
  8.                 al.add("abc06");
  9.                 al.add("abc05");
  10.                 al.add("abc02");
  11.                 al.add("abc07");
  12.                 fillMethod(al, 3, 5);

  13.         }

  14.         public static void fillMethod(List<String> al, int start, int end) {
  15.                 sop(al);
  16.                 List<String> subal = al.subList(start, end);
  17.                 Collections.fill(subal, "pp");
  18.                 sop(subal);
  19.                 sop(al);
  20.                 sop(subal.hashCode());
  21.                 sop(al.hashCode());
  22.         }

  23.         public static void sop(Object obj) {
  24.                 System.out.println(obj);
  25.         }
  26. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

4 个回复

倒序浏览
列表也是引用型变量,subal和al是两个不同的引用,所以哈希值不同
但是subal指向的列表是al指向的列表的一部分,所以指向的是相同的列表元素
你改变了subal指向的元素,就相当于把al指向的元素也改变了
回复 使用道具 举报
这是list集合。。。。。
我都无语了。。。。
回复 使用道具 举报
哥们咋一看,还你为你是用hashSet呢。。。
回复 使用道具 举报
刘胜寒 发表于 2013-5-24 20:43
哥们咋一看,还你为你是用hashSet呢。。。

大哥,啥意思啊,木有明白啊。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马