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,则必须调整数据结构的大小:
构造一个新的空集合;这个
backingHashMap
实例具有默认值
初始容量(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);