Java性能避免创建新的循环

时间:2012-01-17 07:02:42

标签: java performance list

我有这样的代码

Map<String, List> searchMap = new HashMap<String, List>();
for(int i=0; i<something.size(); i++){
 List<String> list = new ArrayList<String>();
 list = getResult(...);
 ...
 searchMap.put(differentkey, list);
}

每次我在循环中创建新的List。如何避免在循环中创建新列表。

5 个答案:

答案 0 :(得分:6)

根本不创建列表,因为它甚至没有在您显示的代码中使用。

List<String> list = getResult(...);

答案 1 :(得分:1)

为什么想要?考虑到你的地图是从一个键到一个列表,看起来你想要的密钥数量与你一样多,所以你需要那么多不同的列表。

特别是,想要在每次迭代时清除列表 - 否则每个映射条目都将引用相同列表

现在您不必创建一个 empty 列表然后忽略 - 您可以在声明中立即将getResult()的值赋给变量:

List<String> list = getResult(...);

这可能仍然会在每次迭代时创建一个新列表(除非getResult()返回现有的迭代),但这可能是你想要的。

请注意,将list变量声明在循环之外没有任何好处 - 变量声明不会影响性能,但通常最好限制变量的范围尽可能 - 所以我会把声明保留在原来的位置。

答案 2 :(得分:1)

请改为尝试:

Map<String, List> searchMap = new HashMap<String, List>();
for(int i=0; i<something.size(); i++){
    List<String> list = getResult(...);
    ...
    searchMap.put(differentkey, list);
}

无需构建新列表。

答案 3 :(得分:0)

Map<String, List> searchMap = new HashMap<String, List>();
List<String> list = new ArrayList<String>();
for(int i=0; i<something.size(); i++){
    list = getResult(...);
    ...
    searchMap.put(differentkey, list);
}

在第4行(list = getResult(...);),您要为list变量指定一个新对象。所以在此之前不需要创建新列表。无论如何,你的变量都将被替换。

答案 4 :(得分:0)

for(int i=0; i<something.size(); i++){
 List<String> list = new ArrayList<String>();
 list = getResult(...);

相当于

for(int i=0; i<something.size(); i++){
 List<String> list = getResult(...);

但我不确定,你是否真的在寻找这个。