gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:30:56 26 4
gpt4 key购买 nike

我有一个List<Pair<String, String>>我想将 Collection 中的数据复制到其中.

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

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));
}

最佳答案

您的代码是错误的,因为您在 while 循环的每次迭代中创建了一个新的迭代器(实际上您创建了其中两个)。每个新的迭代器都将指向 result 的开头。 Collection 。这样你就创建了一个无限循环。

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

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

for (IdentityM im : (Collection<IdentityM>)result) {
identityMemoPairs.add(Pair.of(im.identity,im.memo));
}

编译器会自动使用迭代器将其转换为代码,因此没有性能差异。一般来说,在迭代集合时,性能无论如何都不是问题,只要避免一些不好的事情,例如调用 get(i)LinkedList上.

注意,这里编译器会给你一个警告,这个警告与迭代无关,而是与原始类型 Collection 的使用有关。 (而不是 Collection<IdentityM> )。请检查是否handler.getResult()实际上返回一个 Collection<IdentityM>并更改 result 的类型如果可能的话可以变量。

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

关于java - 获取集合元素的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9098695/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com