gpt4 book ai didi

Java : Set addAll() vs adding using loop

转载 作者:搜寻专家 更新时间:2023-11-01 03:05:31 24 4
gpt4 key购买 nike

我试图通过 for 循环将 2 个集合中的整数添加到单个集合中,并且还使用 Collections 提供的 addAll() 方法。出于测试目的,我用整数填充了 2 个集合,然后尝试将它们添加到第三个集合中

        Set<Integer>  undId = new HashSet<Integer>();
Set<Integer> proxies = new HashSet<Integer>();
//Create 2 sets with Integers
for(int i=0;i<100;i++){
undId.add(i);
proxies.add(i);
}

和方法 1://现在使用 for 循环将它们添加到第三组

            for(Integer integer : undId)
underlyings.add(integer);

for(Integer integer :proxies)
underlyings.add(integer);

和方法 2 ://或者使用 addAll() 将它们添加到第三组

            underlyings.addAll(undId);
underlyings.addAll(proxies);

现在,当我尝试使用 System.nanoTime() 为操作计时时,添加速度快了两倍(对于 100,1000,10000 个元素)。当我将大小增加到 1000000 或 10000000 时。它被逆转了。我想知道为什么更大的集合会发生这种情况。我不确定 addAll() 内部是如何处理的,但是对理解上述内容的任何帮助将不胜感激。谢谢

最佳答案

在你做任何事情之前,确保你已经阅读并理解了这里的讨论:Java benchmarking - why is the second loop faster?

我希望 addAll 在某些情况下会更快,因为它有更多的信息可供使用。

例如,在 ArrayList 上,addAll 可以确保它分配足够的空间来一步添加每个元素,而不是在添加大量元素时必须重新分配多次。

它肯定不会更慢,因为即使是一个简单的实现也只会做你所做的,循环添加项目。

关于Java : Set addAll() vs adding using loop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24203950/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com