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;
}


但是作为一般经验法则,除非绝对确定可以发明更好的轮子,否则不要尝试发明轮子。

08-25 08:49