我想做一个简单的实现,以在bigCodeList包含重复项的不同代码(aCode)的基础上进行一些操作。
下面我提到了两种我想知道的方法,其中在性能方面+内存消耗方面,哪种方法更有效?
方法1:
String tempStr = "";
for(String aCode : bigCodeList){
if(tempStr.indexOf(aCode) == -1) {
// deal With the aCode related work
tempStr += aCode+"-"
}
}
方法2:
HashSet<String> tempHSet = new HashSet<String>();
for(String aCode : bigCodeList){
if(tempHSet.add(aCode)){
// deal With the aCode related work
}
}
注意:aCode是一个类似于LON的三字母代码
最佳答案
方法2到目前为止更好。您甚至不应该考虑方法1。
首先,方法1在搜索中具有线性时间。这意味着,当tempStr
变为两倍长时,搜索它的时间也变为两倍长(当然,平均而言,如果总是找到第一个元素,它就会很短)。
下一步:每次添加tempStr
时,您都要复制整个String
(因为aCode
对象是不可变的,这是从现有对象创建新对象的唯一方法)。因此,添加选项也会花费一些时间。
第三(与性能无关):像这样混合数据(-
)和元数据(分隔符aCode
)会导致各种不良后果。您可能会确定,现在HashSet
绝不能包含破折号,但是如果在两周内发生变化怎么办?
第四:是为该用例而构建的!那是最好的方法:拿着一组不同的对象,检查它是否已经存在并添加一个新对象。