Java Set - Set.add() 和 Set.addAll() 哪个更快?

标签 java collections set

Set 维护唯一记录,并在尝试复制现有元素时更新现有记录。

考虑以下两种情况。您认为两者之间哪一个代码更快、更高效?

场景 1:使用 addAll()

Set<String> uniqueSet = new HashSet<String>();
uniqueSet = getSomedata(param1);
uniqueSet.addAll( getSomedata(param2) );

这里 getSomedata() 只是返回数据集合,该方法中没有特殊逻辑。

场景 2:使用 add()

Set<String> uniqueSet = new HashSet<String>();
getSomedata(param1, uniqueSet);
getSomedata(param2, uniqueSet );

这里getSomedata()如下

void getSomedata(String param, Set<String> uniqueSet){
    while (someCollection.hasNext()){
        uniqueSet.add( someCollection.get() );
    }
}

最佳答案

addAll 基本上迭代其给定的集合,并在每个方法上调用 add 。 OpenJDK8 的实现方式如下:

public boolean addAll(Collection<? extends E> c) {
    boolean modified = false;
    for (E e : c)
        if (add(e))
            modified = true;
    return modified;
}

但作为一般经验法则,除非您完全确定自己可以发明更好的轮子,否则您不应该尝试发明轮子。

关于Java Set - Set.add() 和 Set.addAll() 哪个更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32799468/

相关文章:

c# - KeysCollection 中的键是什么?

java - 对迄今为止的集合进行排序

java - Pangram 在 Java 中使用哈希集

java - 如何为类型类的数组编写 'get/set method'?

java - ArrayList 的 IndexOutOfBounds(用多个数字测试)

java - 在 Java Batch 中从读取器获取属性

c# - 如何将字典从 Javascript 传递到 C# 运行时组件?

java - Maven中的多重打包

java - NoSuchMethodError : registerAutoProxyCreatorIfNecessary with Spring 4, Hibernate 4 和 Maven 3

css - Asp.Net 设置不同的 css 类来生成 Datalist 中的元素