Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/312.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 这两组陈述的确切区别是什么? Set union=newhashset(s1);_Java_Collections - Fatal编程技术网

Java 这两组陈述的确切区别是什么? Set union=newhashset(s1);

Java 这两组陈述的确切区别是什么? Set union=newhashset(s1);,java,collections,Java,Collections,及 Set union=newhashset(); Set s1=新的HashSet(); union.addAll(s1); 没有区别。两者都将创建一个包含集合s1中所有元素的新集合 当然,您的第二个代码示例甚至不会编译,因为您不能直接实例化Set接口,但我假设您的意思是说newhashset,而不是newset,假设Sets1在第一个和第二个示例中包含相同的内容,最终结果应该是一样的 (但是,第二个示例不会编译,因为Set是一个接口,而不是一个具体的类。) 使用构造函数的一个优点是,它的初始

Set union=newhashset();
Set s1=新的HashSet();
union.addAll(s1);

没有区别。两者都将创建一个包含集合s1中所有元素的新集合


当然,您的第二个代码示例甚至不会编译,因为您不能直接实例化
Set
接口,但我假设您的意思是说
newhashset
,而不是
newset

,假设
Set
s1
在第一个和第二个示例中包含相同的内容,最终结果应该是一样的

(但是,第二个示例不会编译,因为
Set
是一个接口,而不是一个具体的类。)

使用构造函数的一个优点是,它的初始容量足以容纳传递到构造函数中的
集合
(在本例中为
集合
s1
):

构造一个包含 指定集合中的元素。
HashMap
是使用默认值创建的 荷载系数(0.75)和初始荷载 容量足以容纳 指定集合中的元素

但是,使用构造函数时,初始大小为16,因此,如果通过添加的
集合
大于16,则必须调整数据结构的大小:

构造一个新的空集合;这个 backing
HashMap
实例具有默认值 初始容量(16)和荷载系数 (0.75)

因此,就性能和效率而言,使用构造函数创建
哈希集
可能是一个更好的选择

然而,从代码可读性的角度来看,变量名
union
似乎意味着新创建的
Set
是另一个
Set
的并集,因此使用
addAll
方法的可能是更容易理解的代码


如果只是从现有的
集合中创建一个新的
集合
,那么新创建的
集合
可能应该以不同的名称命名,例如
新闻集
copyOfS1
或类似的东西。

第一个将更有效,因为第二个
集将在备份数据结构中使用正确的空间量创建,而在第二个代码中,
集必须调整大小,以便为新元素腾出空间


就最终结果而言,它们是相同的。

有一点不同,新的哈希集(s1)将事先确保所有元素都适合,并且不需要重新灰化。

对不起,我编辑了我的问题:)请在这个问题上添加“collection”标记…@Peter Kofler:好建议已添加集合的标记。
Set<Type> union = new HashSet<Type>(s1);
Set<Type> union = new HashSet<Type>();
Set<Type> s1 = new HashSet<Type>();
union.addAll(s1);