作业帮 > 综合 > 作业

sn = s1;与ss = new hashset(s1); 这两个方法都可以打印出正确的结果,但是这两个方法有什么区别

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/06/08 19:01:19
sn = s1;与ss = new hashset(s1); 这两个方法都可以打印出正确的结果,但是这两个方法有什么区别?


ss = new hashset(s1)创建了一个新的HashSet,并把s1里的元素都加进去,而sn = s1只是把s1赋值给sn,其实sn就是s1.所以如果改动ss,s1是不会变的,而改动sn,就是改动s1.
再问: 那就是都有了s1里面的元素。但是当我求s1和s2里面的并集的时候,求出来的结果之有三个,而如果用new出来的hashset的话,就可以求出他的并集,为什么
再答: "那就是都有了s1里面的元素"是指在 ss = new hashset(s1); 这句刚执行完以后是这样的,然后s1或ss如果改变了,里面移除或添加了元素,那就不一定了,这两集合不是同一个,而sn和s1是同一个。 把你的程序贴上来看看。
再问: 图片我已经上传了,我已经将两个不同的情况都截图了,你看看为什么会这样
再答: 第一个情况 第10行sn就是s1,第12行就是把所有s1里不属于s2的东西去掉,只剩a,第17行新创su,其中的元素当然也只有a,第18行往里加上所有s2的元素,于是里面有a,d,e。 第二个情况 第11行新创ss,其中的元素是s1中元素,所以是abc,第13行就是把所有ss里不属于s2的东西去掉,只剩a,但是注意,因为ss和s1是两个不同的集合,ss里仍旧有abc,第17行新创su,其中的元素当然就是abc,第18行往里加上所有s2的元素,于是里面有a,b,c,d,e。
再问: 不好意思,我再问多你一下,第一种情况之下,s1=a,b,c了。可为什么求并集的时候就只有ade呢。我就是这里不了解。请你帮我解析一下好吗
再答: 我已经解释了啊:第12行就是把所有s1里不属于s2的东西去掉,于是现在s1里只有a了。
再问: 不好意思,我是说addAll这个方法,就是第一种情况addAll这个方法搞晕我了。。请你帮我解析一下,我看你都是java的高手
再答: su.addAll(s2)就是把所有s2里的元素都加到su里去,s2从来没变过,里面一直有三个元素a,d,e。有什么问题?你不如在每一步都把所有的集合的元素都打印出来看看,看看每一步那些集合都是怎么变化的,想想为什么。