首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将一个集合分配给另一个集合,当清除为performed.Both时,集合将被清除

将一个集合分配给另一个集合,当清除为performed.Both时,集合将被清除
EN

Stack Overflow用户
提问于 2012-10-15 01:58:27
回答 2查看 2.7K关注 0票数 4

1.最初创建了两个集合。2.将元素添加到一个集合。3.将一个集合分配给另一个集合。4.如果在一个集合上调用clear,则两个集合都将被清除。

有人能帮助解决这个问题吗?

代码语言:javascript
复制
import java.util.HashSet;
import java.util.Set;

public class SetOperation {

Set<Integer> a = new HashSet<Integer>();
Set<Integer> b = new HashSet<Integer>();

void assignAndClear(){

    a.add(3);
    a.add(7);
    a.add(5);
    a.add(19);
    a.add(99);

    System.out.println("a:" +a );
    System.out.println("b:" +b );

    b=a;

    System.out.println("After assigning");
    System.out.println("a:" +a );
    System.out.println("b:" +b );

    b.clear();

    System.out.println("after clearing");
    System.out.println("a:" +a );
    System.out.println("b:" +b );       
}
public static void main(String[] args) {

    SetOperation sd = new SetOperation();
    sd.assignAndClear();
}
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-15 02:00:07

将一个集合分配给另一个集合时,不会创建新的集合,而是会创建一个指向现有集合的新参照。因此,无论您使用a对集合进行什么更改,都会在b中得到反映。

这对于any可变对象是正确的。

但不适用于Immutable对象。

例如,考虑String的情况:

代码语言:javascript
复制
String s = "a";
String s1 = s; // Both `s` and `s1` points to `"a"`

s1 = "b";  // Only s1 will point to "b". `s` still points to "a".

在上述情况下,更改不会反映到所有引用,因为Strings是不可变的。因此,对字符串所做的任何更改都将创建一个new object

但是,如果你有mutable object。:-

代码语言:javascript
复制
Set<String> set = new HashSet<String>();
Set<String> set3 = new HashSet<String>(); // A different set object
Set<String> set2 = set;   // Point to the same set object as "set"

set2.clear();  // Will clear the actual object. Pointed by "set"
// And thus both the reference pointing to that object, will see the change.

set3 = set; // Change reference `set3` to point to the `Set object` pointed by `set`

set3.add("a");  // Will change `set` also.

如果要创建Set的副本。像这样做:-

代码语言:javascript
复制
Set<String> set1 = new HashSet<String>();
Set<String> set3 = new HashSet<String>(set1);
票数 4
EN

Stack Overflow用户

发布于 2012-10-15 02:00:27

您将覆盖对b中原始哈希集的内存位置的引用。您需要将a的元素复制到b中,而不是将a分配给b

尝试:

代码语言:javascript
复制
 b = new HashSet<Integer>(a);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12884937

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档