Java 即使将对象从集合中移除,集合大小也不会减小
给出一段代码片段Java 即使将对象从集合中移除,集合大小也不会减小,java,Java,给出一段代码片段 package setexample; import java.util.HashSet; import java.util.Set; public class Mapit { public static void main(String[] args) { Set<Integer> set = new HashSet<Integer>(); Integer i1 = 45; Integer
package setexample;
import java.util.HashSet;
import java.util.Set;
public class Mapit {
public static void main(String[] args) {
Set<Integer> set = new HashSet<Integer>();
Integer i1 = 45;
Integer i2 = 46;
set.add(i1);
set.add(i1);
set.add(i2);
System.out.println(set.size());
set.remove(i1);
System.out.println(set.size());
i2 =47;
set.remove(i2);
System.out.println(set.size());
}
}
包设置示例;
导入java.util.HashSet;
导入java.util.Set;
公共类Mapit{
公共静态void main(字符串[]args){
Set=newhashset();
整数i1=45;
整数i2=46;
添加(i1);
添加(i1);
添加(i2);
System.out.println(set.size());
设置。移除(i1);
System.out.println(set.size());
i2=47;
设置。移除(i2);
System.out.println(set.size());
}
}
o/p显示为
211
,而不是我预期的2110
。原因是什么?在Set Set
中先前命名为i2
的对象的引用与第行之后命名为i2
的对象不同:i2=47代码>。JVM为集中的对象创建了一个新的引用,因此您可以删除它,但引用集中的对象,您不能通过引用它以前的名称来删除它。在集合中先前命名为i2
的对象的引用与第行之后命名为i2
的对象的引用不同:i2=47代码>。JVM为集中的对象创建了一个新的引用,因此您可以删除它,但引用集中的对象,您不能通过引用它以前的名称来删除它。在集合中先前命名为i2
的对象的引用与第行之后命名为i2
的对象的引用不同:i2=47代码>。JVM为集中的对象创建了一个新的引用,因此您可以删除它,但引用集中的对象,您不能通过引用它以前的名称来删除它。在集合中先前命名为i2
的对象的引用与第行之后命名为i2
的对象的引用不同:i2=47代码>。JVM已经为集中的对象创建了一个新的引用,因此您可以删除它,但是引用集中的对象时,您不能删除它,因为它引用的是以前的名称。您试图从包含46
的集中删除47
。你以为会发生什么?@Kayaman OP怀疑我猜不是关于价值,而是关于对象和它的引用。。。如果未将i2
放入集合
中,则可以将值从47
更改为46
,并仅引用name@JordiCastilla是的,但我发现java是按值传递的,因此引用变量(i2)是updated@AbhishekSingh当您没有对该对象的任何其他引用时,这是完全正确的。您试图从包含46
的集合中删除47
。你以为会发生什么?@Kayaman OP怀疑我猜不是关于价值,而是关于对象和它的引用。。。如果未将i2
放入集合
中,则可以将值从47
更改为46
,并仅引用name@JordiCastilla是的,但我发现java是按值传递的,因此引用变量(i2)是updated@AbhishekSingh当您没有对该对象的任何其他引用时,这是完全正确的。您试图从包含46
的集合中删除47
。你以为会发生什么?@Kayaman OP怀疑我猜不是关于价值,而是关于对象和它的引用。。。如果未将i2
放入集合
中,则可以将值从47
更改为46
,并仅引用name@JordiCastilla是的,但我发现java是按值传递的,因此引用变量(i2)是updated@AbhishekSingh当您没有对该对象的任何其他引用时,这是完全正确的。您试图从包含46
的集合中删除47
。你以为会发生什么?@Kayaman OP怀疑我猜不是关于价值,而是关于对象和它的引用。。。如果未将i2
放入集合
中,则可以将值从47
更改为46
,并仅引用name@JordiCastilla是的,但我发现java是按值传递的,因此引用变量(i2)是updated@AbhishekSingh当您没有对对象的任何其他引用时,这是完全正确的。