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

4

这段代码会抛出错误。 该方法使用从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;
    }

2
请查看类似的问题:https://dev59.com/3G865IYBdhLWcg3wU8-I?rq=1 - vijay
1个回答

3

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接