java - 性能 - 使用 keySet 迭代器而不是 entrySet 迭代器的效率低下

标签 java iterator sonarqube keyset entryset

<分区>

这段代码抛出错误 此方法使用从 keySet 迭代器检索到的键访问 Map 条目的值。在 map 的 entrySet 上使用迭代器会更有效,以避免 Map.get(key) 查找。 请指导我如何改写它

if (docPropertiesMap != null) {
        Iterator<String> properties = docPropertiesMap.keySet().iterator();
        IDocProperty[] docProperties = new IDocProperty[docPropertiesMap
                .size()];
        int iArrIndex = 0;

        while (properties.hasNext()) {
            String strPropName = properties.next();
            String[] propValue = docPropertiesMap.get(strPropName);

            IDocProperty docProperty = (IDocProperty) FDMAFactory
                    .getDataObject("DocProperty");
            docProperty.setPropertyName(strPropName);
            docProperty.setArrPropertyValues(propValue);
            docProperties[iArrIndex++] = docProperty;
        }
        metadata.setArrDocProperties(docProperties);
        return metadata;
    }

最佳答案

这是来自 FindBugs 的 SonarQube 警告。

您可以像这样重写您的代码:

if (docPropertiesMap != null) {
    IDocProperty[] docProperties = new IDocProperty[docPropertiesMap.size()];
    int iArrIndex = 0;

    for (Map.Entry<String, String[]> entry : docPropertiesMap.entrySet()) {
        String strPropName = entry.getKey();
        String[] propValue = entry.getValue();

        IDocProperty docProperty = (IDocProperty) FDMAFactory.getDataObject("DocProperty");
        docProperty.setPropertyName(strPropName);
        docProperty.setArrPropertyValues(propValue);
        docProperties[iArrIndex++] = docProperty;
    }
    metadata.setArrDocProperties(docProperties);
    return metadata;
}

关于java - 性能 - 使用 keySet 迭代器而不是 entrySet 迭代器的效率低下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32779673/

相关文章:

Java自定义注解/装饰器@Testing

java - 如何在没有jar文件的情况下在命令行中编译和运行Netbeans java项目?

java - SonarQube:无法读取 7.1.1-coverage.ec 以确定 JaCoCo 二进制格式

java - 如何在SWT中将屏幕分成3部分?

java - Spring 启动: JPA incorrectly adds where clause

C++ 多映射迭代器失效

.net-core - OpenCover 未上传到 Azure Devops

java - 返回 'data' 可能会暴露内部数组?

c++ - std::filesystem::directory_iterator 真的是迭代器吗?

java - 为什么此代码不会导致 ConcurrentModificationException?