nam*_*olk 2 java memory performance
我想做一个简单的实现,根据bigCodeList中包含重复项的不同代码(aCode)做一些操作.下面我提到了两种方法,我想知道的是哪种方法在性能副+内存消耗方面更有效?
方法1:
String tempStr = "";
for(String aCode : bigCodeList){
if(tempStr.indexOf(aCode) == -1) {
// deal With the aCode related work
tempStr += aCode+"-"
}
}
Run Code Online (Sandbox Code Playgroud)
方法2:
HashSet<String> tempHSet = new HashSet<String>();
for(String aCode : bigCodeList){
if(tempHSet.add(aCode)){
// deal With the aCode related work
}
}
Run Code Online (Sandbox Code Playgroud)
注意:aCode是一个像LON一样的三字母代码
方法2到目前为止更好.你甚至不应该考虑方法1.
首先,方法1在搜索中具有线性时间.这意味着当tempStr它变成两倍长时,搜索它的时间变长两倍(平均来说,当然,如果你总是找到第一个元素,它会保持短暂).
下一步:tempStr每次附加时都会复制整个(因为String对象是不可变的,这是从现有对象创建新对象的唯一方法).所以添加选项也需要很长时间.
第三(不是性能问题):像这样混合数据(aCode)和元数据(分隔符-)会导致各种不良影响.您可能确定现在 aCode永远不会包含短划线,但如果在两周内发生变化会怎么样?
第四:HashSet是内置了非常正是这种使用案例!这就是它最擅长的:保存一组不同的对象,检查它是否已经存在并添加一个新对象.
| 归档时间: |
|
| 查看次数: |
147 次 |
| 最近记录: |