我有这样的代码
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。如何避免在循环中创建新列表。
答案 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(...);
但我不确定,你是否真的在寻找这个。