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

SR *_*han 5 java collections set

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

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

场景 1:使用 addAll()

Set<String> uniqueSet = new HashSet<String>();
uniqueSet = getSomedata(param1);
uniqueSet.addAll( getSomedata(param2) );
Run Code Online (Sandbox Code Playgroud)

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

场景 2:使用 add()

Set<String> uniqueSet = new HashSet<String>();
getSomedata(param1, uniqueSet);
getSomedata(param2, uniqueSet );
Run Code Online (Sandbox Code Playgroud)

getSomedata()是如下

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

Mur*_*nik 2

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

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

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