【问题标题】:Performance - Inefficient use of keySet iterator instead of entrySet iterator [duplicate]性能 - 使用 keySet 迭代器而不是 entrySet 迭代器效率低下[重复]
【发布时间】:2015-12-23 03:19:00
【问题描述】:

这段代码抛出错误 此方法使用从 keySet 迭代器中检索到的键来访问 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;
    }

【问题讨论】:

标签: java iterator sonarqube keyset entryset


【解决方案1】:

这是来自 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;
}

【讨论】:

    猜你喜欢
    • 2021-10-10
    • 2012-09-20
    • 2013-10-30
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2021-07-08
    • 2019-01-12
    相关资源
    最近更新 更多