【发布时间】:2015-09-26 16:41:06
【问题描述】:
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() );
}
}
【问题讨论】:
-
看一下实现,在JDK自带的src.zip里。如果您正确设置了 IDE,您应该可以在那里查看它。
-
首先,第一个sn-p不应该创建一个无用的空HashSet。其次,你应该争取的不是表现。这两者之间的差异可能微不足道。你应该争取的是可读性和可维护性。我希望一个名为 getSomedata() 的方法返回一些数据。不要将 Set 作为参数,填充它,并且什么也不返回。如果您想将数据添加到 List 而不是 Set 怎么办?或者如果你只是想迭代它?第一个更自然,更易于理解和使用。
-
@JBNizet,实际上在我的应用程序中,我正在从服务器公开的文件中读取大量数据。文件中的行是唯一的,但可以在多个文件中重复。从所有文件中收集数据后,我只需要处理唯一的记录。如您所知,List 不强制唯一性。因此我选择了 Set。
-
花在 IO 上的时间可能比花在处理集合上的时间大得多。使用您认为最易读的内容,并仅在需要时进行优化。
标签: java collections set