使用List的有效方法

时间:2017-02-03 20:47:15

标签: java arraylist collections iterator

请注意这是一个错误的问题。我之所以问这个问题是因为当我尝试使用Iterator时,我的IntelliJ对“Iterator”保持警惕,说Iterator没有类型参数,这不是真的。

不知何故,我的IntelliJ似乎显示了java 1.4的javadoc。我还在努力解决它。感谢。

^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^

我参与了一个java程序,其中api返回一个List。

我处理这个问题的方法是:

ArrayList<SomeObject> arrayList = new ArrayList<>(apiThatReturnsAList);
for (SomeObject someObject : arrayList) {
    ...
}

我的代码审核人员认为这可能是一种处理它的效率较低的方法,因为它会复制数据。他建议我使用Iterator。但我发现代码会是这样的:

Iterator iterator = apiThatReturnsAList.iterator();
while (iterator.hasNext()) {
    SomeObject someObject = (SomeObject)iterator.next();
}

这里有丑陋的演员,我们不想看,因为它不安全。

那么,有没有一种有效的方法来处理这个api而不是复制数据呢?

谢谢!

3 个答案:

答案 0 :(得分:4)

只需使用期望的类参数化迭代器:

Iterator<SomeObject> iterator = apiThatReturnsAList.iterator();

当您致电SomeObject时,您将获得next()个实例:

Iterator<SomeObject> iterator = apiThatReturnsAList.iterator();
while (iterator.hasNext()) {
    SomeObject someObject = iterator.next();
}

答案 1 :(得分:4)

为避免复制,您可以将foreach用于apiThatReturnsAList

for (SomeObject someObject : apiThatReturnsAList) {
    ...
}

事实上,foreach与引擎盖下的迭代器做同样的工作JLS 14.14.2. The enhanced for statement

答案 2 :(得分:0)

使用for-each打印apiThatReturnsList

中元素的内容
for (SomeObject element : apiThatReturnsList) {
    System.out.println(element);
}

无需将列表复制到另一个列表中。

相关问题