Java性能避免创建新的in循环

Java性能避免创建新的in循环,java,performance,list,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); } Map

我有这样的代码

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);
}
Map searchMap=newhashmap();

对于(inti=0;i,根本不创建列表,因为在您显示的代码中甚至没有使用它

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

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

List<String> list = getResult(...);
List List=getResult(…);
Map searchMap=new HashMap();
列表=新的ArrayList();
对于(int i=0;i
Map searchMap=newhashmap();
列表=新的ArrayList();
对于(int i=0;i你为什么要这样做?看起来你想要的列表和键一样多,因为你的映射是从一个键到一个列表…所以你想要那么多不同的列表

特别是,您不希望在每次迭代时只清除列表,否则每个映射条目将引用相同的列表

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

List<String> list = getResult(...);
List List=getResult(…);
这可能仍然会在每次迭代中创建一个新列表(除非
getResult()
返回一个现有列表),但这可能是您想要的

请注意,在循环之外声明
列表
变量没有任何好处-变量声明不会影响性能,但通常尽可能限制变量的范围是一个好主意-因此我会将声明保留在原来的位置。

为什么要这样做?看起来您需要尽可能多的列表eys,假设你的地图是从一个键到一个列表…所以你需要很多不同的列表

特别是,您不希望在每次迭代时只清除列表,否则每个映射条目将引用相同的列表

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

List<String> list = getResult(...);
List List=getResult(…);
这可能仍然会在每次迭代中创建一个新列表(除非
getResult()
返回一个现有列表),但这可能是您想要的

请注意,在循环之外声明
列表
变量没有任何好处-变量声明不会影响性能,但通常最好尽可能限制变量的范围-因此我会保留声明。

尝试以下方法:

Map<String, List> searchMap = new HashMap<String, List>();
for(int i=0; i<something.size(); i++){
    List<String> list = getResult(...);
    ...
    searchMap.put(differentkey, list);
}
Map searchMap=newhashmap();
对于(int i=0;i请尝试以下方法:

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


for(int i=0;i
for(int i=0;i
for(int i=0;我不会引用映射中的列表。当我尝试返回或迭代映射时,它可能会有不同的结果。此外,请确保
ArrayList
是要创建的适当类型的列表。例如,创建
LinkedList
可能会更有效。我想知道是否随机访问此
>列表
是真的需要吗?@imrantariq:我们不知道
getResult()
做了什么,这使得我们更难理解发生了什么。如果这个代码不起作用,你需要给我们更多的信息——因为它应该这样做。当然,如果你需要将列表传递到
getResult()
这会让事情有点混乱-但你需要给我们这些信息。请阅读它,它不是引用地图中的列表。当我尝试返回或迭代地图时,它可能会有不同的结果。另外,请确保
ArrayList
是要创建的适当类型的列表。可能是创建
LinkedLi例如,st
,效率会更高。我想知道是否真的需要随机访问这个
列表
是的,这使我们更难理解发生了什么。如果此代码不起作用,您需要向我们提供更多信息,因为它应该提供。当然,如果您需要将列表传递到
getResult()中
这让事情稍微有些混乱-但你需要给我们这些信息。请阅读诅咒你和你的12秒优势!@Paul Hah!击败你获得第四名。:)诅咒你和你的12秒优势!@Paul Hah!击败你获得第四名。:)为什么他需要构造一个新的
ArrayList
?为什么他想扩大列表变量的范围?也许他在第4行之后使用了它。我们不知道他在“…”(第5行)下的意思为什么他需要构造一个新的
ArrayList
?为什么他想扩大列表变量的范围?也许他在第4行之后使用了这个。我们不知道他在“…”(第5行)下的意思。我们无法从您的代码中看出您在做什么(我是干什么的?什么是
getResult
?)。很明显,
=new ArrayList();\n list
可以被编辑,因为list-get随后被绑定到
getResult(…);
。我们无法从您的代码中看出您在做什么(i是干什么的?
getResult
?)。很明显,
=new ArrayList();\n可以使用list
命令,因为list get随后绑定到
getResult(…);