Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取集合元素的最快方法是什么?_Java_List_Collections - Fatal编程技术网

Java 获取集合元素的最快方法是什么?

Java 获取集合元素的最快方法是什么?,java,list,collections,Java,List,Collections,我有一个列表,我想将集合中的数据复制到该列表中 阅读收藏并将项目添加到列表中的最佳方式是什么? List<Pair<String, String>> identityMemoPairs = new LinkedList<Pair<String, String>>(); Collection result = handler.getResult(); while(result.iterator().hasNext()){

我有一个
列表
,我想将
集合中的数据复制到该列表中

阅读收藏并将项目添加到列表中的最佳方式是什么?

List<Pair<String, String>> identityMemoPairs = new LinkedList<Pair<String, String>>();
Collection result = handler.getResult();

    while(result.iterator().hasNext()){
         IdentityM im =(IdentityM) result.iterator().next();
         identityMemoPairs.add(Pair.of(im.identity,im.memo));
    }
List identityemopairs=new LinkedList();
集合结果=handler.getResult();
while(result.iterator().hasNext()){
IdentityM im=(IdentityM)result.iterator().next();
identityemopairs.add(一对(im.identity,im.memo));
}

您的代码非常好。但是您可能会让
处理程序
直接返回对的集合,这样您就可以调用
identityemopairs.addAll()
,而不是自己迭代集合。但这只会让它变得“更漂亮”,而不会带来更高的性能。

您的代码确实很好。但是您可能会让
处理程序
直接返回对的集合,这样您就可以调用
identityemopairs.addAll()
,而不是自己迭代集合。但这只会使它“更漂亮”,而不会提供更高的性能。

您的代码是错误的,因为您在while循环的每个迭代中都创建了一个新的迭代器(实际上您创建了两个迭代器)。每个新的迭代器将指向
结果
集合的开始。因此,您创建了一个无限循环

要解决此问题,请仅调用一次
result.iterator()
,并将结果存储在变量中

但更好的(更好读,更不容易出错)是for-each循环,它(几乎总是)是迭代集合的首选变量:

for (IdentityM im : (Collection<IdentityM>)result) {
  identityMemoPairs.add(Pair.of(im.identity,im.memo));
}
for(IdentityM im:(收集)结果){
identityemopairs.add(一对(im.identity,im.memo));
}
编译器将使用迭代器自动将其转换为代码,因此没有性能差异。一般来说,在对集合进行迭代时,性能无论如何都不是问题,只要您避免了一些不好的事情,比如在
LinkedList
上调用
get(i)

请注意,编译器将在此处向您发出警告,该警告与迭代无关,而是使用原始类型
集合
(而不是
集合
)。请检查
handler.getResult()
是否实际返回
集合
,如果可能,将
result
变量的类型更改为此


另一个问题是,您是否真的需要该列表成为一个成对的列表。通常不建议使用普通对类,因为它们的名称不显示它们所表示的对象的含义。例如,最好使用包含名字和姓氏字段的类
PersonName
,而不是
对。为什么你不能只使用
列表
?如果您可以使用此功能,您确定不能使用
集合
?(
List
Collection
通常是可交换的。)然后您可以完全避免复制。

您的代码是错误的,因为您在while循环的每个迭代中都创建了一个新的迭代器(实际上您创建了两个迭代器)。每个新的迭代器将指向
结果
集合的开始。因此,您创建了一个无限循环

要解决此问题,请仅调用一次
result.iterator()
,并将结果存储在变量中

但更好的(更好读,更不容易出错)是for-each循环,它(几乎总是)是迭代集合的首选变量:

for (IdentityM im : (Collection<IdentityM>)result) {
  identityMemoPairs.add(Pair.of(im.identity,im.memo));
}
for(IdentityM im:(收集)结果){
identityemopairs.add(一对(im.identity,im.memo));
}
编译器将使用迭代器自动将其转换为代码,因此没有性能差异。一般来说,在对集合进行迭代时,性能无论如何都不是问题,只要您避免了一些不好的事情,比如在
LinkedList
上调用
get(i)

请注意,编译器将在此处向您发出警告,该警告与迭代无关,而是使用原始类型
集合
(而不是
集合
)。请检查
handler.getResult()
是否实际返回
集合
,如果可能,将
result
变量的类型更改为此


另一个问题是,您是否真的需要该列表成为一个成对的列表。通常不建议使用普通对类,因为它们的名称不显示它们所表示的对象的含义。例如,最好使用包含名字和姓氏字段的类
PersonName
,而不是
对。为什么你不能只使用
列表
?如果您可以使用此功能,您确定不能使用
集合
?(
List
Collection
通常是可交换的。)这样你就可以完全避免复制了。

好吧,我认为最好的方法是。。。读取集合并将转换后的值添加到列表中。没有更多的了说真的,问题出在哪里?检查以了解列表实现的性能。迭代时没有区别。我花了很长时间才得到元素。答案是否帮助您解决问题?如果是,请选择一个作为接受答案。如果没有,请提供更多的信息,说明仍然存在的问题。好吧,我认为最好的方法是。。。读取集合并将转换后的值添加到列表中。没有更多的了说真的,问题出在哪里?检查以了解列表实现的性能。迭代时没有区别。我花了很长时间才得到元素。答案是否帮助您解决问题?如果是,请选择一个作为接受答案。如果没有,请提供关于仍然存在问题的其他信息。