Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:更新哈希集的哈希集_Java_Set_Hashset - Fatal编程技术网

Java:更新哈希集的哈希集

Java:更新哈希集的哈希集,java,set,hashset,Java,Set,Hashset,在下面的示例中,BigSetHashSet由SmallSetHashSet组成。我想清除SmallSet而不清除BigSet 相反,当我在SmallSet上执行clear()命令时,BigSet也被清除。为什么会发生这种情况?我怎样才能只清除SmallSet,而保持BigSet不变 我已经包括了打印声明来说明正在发生的事情 import java.util.HashSet; import java.util.Set; import java.util.Arrays; public class

在下面的示例中,
BigSet
HashSet由
SmallSet
HashSet组成。我想清除
SmallSet
而不清除
BigSet

相反,当我在
SmallSet
上执行
clear()
命令时,
BigSet
也被清除。为什么会发生这种情况?我怎样才能只清除
SmallSet
,而保持
BigSet
不变

我已经包括了打印声明来说明正在发生的事情

import java.util.HashSet;
import java.util.Set;
import java.util.Arrays;

public class G{
    public static final HashSet<HashSet> BigSet = new HashSet <HashSet>();
    public static final HashSet<Set> SmallSet = new HashSet<Set>();

    public static Set<Integer> method() {
        Set<Integer> n = new HashSet<Integer>(Arrays.asList(10, 20, 30));
        SmallSet.add(n);
        BigSet.add(SmallSet);
        System.out.println(SmallSet);
        System.out.println(BigSet);
        SmallSet.clear();
        System.out.println(SmallSet);
        System.out.println(BigSet);
        return n;
    }

    public static void main(String[] args) {
        method();
    }
}

SmallSet
添加到
BigSet
时,添加的是集合本身,而不是其中的集合。所以你也可以

BigSet.add(new HashSet(SmallSet));

我个人推荐后者

但是,请注意,由于要将
集合添加到小集合,如果您执行了以下操作:

    Set<Integer> n = new HashSet<Integer>(Arrays.asList(10, 20, 30));
    SmallSet.add(n);
    BigSet.addAll(SmallSet);
    n.remove(20);
    System.out.println(BigSet);
Set n=newhashset(Arrays.asList(10,20,30));
加(n);
BigSet.addAll(SmallSet);
n、 移除(20);
System.out.println(BigSet);
您将得到
[10,30]
,因为添加到
BigSet
的是集合,而不是集合的元素


另外,当我在学校做类似的事情时,我被强烈鼓励去“画盒子”——在黑板、白板或纸上画实体盒子。在这种情况下,您甚至可能希望使用便笺卡,并将它们放在彼此的顶部,以显示在何处。它确实有助于让你的大脑围绕它。

当你将
SmallSet
添加到
BigSet
时,你添加的是集合本身,而不是其中的集合。所以你也可以

BigSet.add(new HashSet(SmallSet));

我个人推荐后者

但是,请注意,由于要将
集合添加到小集合,如果您执行了以下操作:

    Set<Integer> n = new HashSet<Integer>(Arrays.asList(10, 20, 30));
    SmallSet.add(n);
    BigSet.addAll(SmallSet);
    n.remove(20);
    System.out.println(BigSet);
Set n=newhashset(Arrays.asList(10,20,30));
加(n);
BigSet.addAll(SmallSet);
n、 移除(20);
System.out.println(BigSet);
您将得到
[10,30]
,因为添加到
BigSet
的是集合,而不是集合的元素


另外,当我在学校做类似的事情时,我被强烈鼓励去“画盒子”——在黑板、白板或纸上画实体盒子。在这种情况下,您甚至可能希望使用便笺卡,并将它们放在彼此的顶部,以显示在何处。它确实有助于让你的大脑围绕它。

当你清除
smallSet
时,你不正确地认为你正在清除
bigSet
smallSet
仍然在
bigSet
中,只是它现在是空的(因为您清除了它)。因此,当您从print语句中看到
[[]]
时,它告诉您
bigSet
现在包含一个空集(特别是现在为空的
smallSet

我怀疑你的误解是,你在想象当你添加
bigSet
时,它正在复制
smallSet
。事实并非如此。它向变量
smallSet
引用的同一对象添加引用。调用
smallSet.clear
时,您正在清除变量和
bigSet
引用的set对象

如果您确实想要
smallSet
内部
bigSet
的副本,最简单的方法是创建一个新集合,而不是清除
smallSet

bigSet.add(smallSet);
smallSet = new HashSet<>();
bigSet.add(smallSet);
smallSet=新的HashSet();

当您清除
smallSet
时,您清除
bigSet
是不正确的
smallSet
仍然在
bigSet
中,只是它现在是空的(因为您清除了它)。因此,当您从print语句中看到
[[]]
时,它告诉您
bigSet
现在包含一个空集(特别是现在为空的
smallSet

我怀疑你的误解是,你在想象当你添加
bigSet
时,它正在复制
smallSet
。事实并非如此。它向变量
smallSet
引用的同一对象添加引用。调用
smallSet.clear
时,您正在清除变量和
bigSet
引用的set对象

如果您确实想要
smallSet
内部
bigSet
的副本,最简单的方法是创建一个新集合,而不是清除
smallSet

bigSet.add(smallSet);
smallSet = new HashSet<>();
bigSet.add(smallSet);
smallSet=新的HashSet();

OP说bigSet是一个包含集合的集合。我不认为OP是在寻找要添加的元素。这很有意义。add(新HashSet(SmallSet))是我一直在寻找的。ThanksI会说
BigSet.add(新HashSet…
BigSet.addAll(…)
做同样的事情,但是addAll的速度是原来的两倍,因为它不必从
SmallSet
转储到
新HashSet
中。我强烈推荐
addAll
over
add(new
OP说bigSet是一个包含集合的集合。我不认为OP在寻找要添加的元素。这很有意义。bigSet.add(new HashSet(SmallSet))就是我要找的。谢谢我会说
bigSet.add(new HashSet…)
bigSet.addAll(…)
执行完全相同的操作,但是addAll的速度是原来的两倍,因为它不必从
SmallSet
转储到
newhashset
中。我强烈推荐
addAll
而不是
add(new
你说得对;这正是我想说的。我猜解决方案是SmallSet的新哈希集,正如你所说。谢谢你说得对;这正是我想说的。我猜解决方案是SmallSet的新哈希集,正如你所说。谢谢