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

Java 性能-使用键集迭代器而不是entrySet迭代器效率低下,java,iterator,sonarqube,keyset,entryset,Java,Iterator,Sonarqube,Keyset,Entryset,这段代码抛出错误 此方法使用从键集迭代器检索的键访问映射项的值。在map的entrySet上使用迭代器更有效,以避免map.get(key)查找。 请指导我如何重新措辞 if (docPropertiesMap != null) { Iterator<String> properties = docPropertiesMap.keySet().iterator(); IDocProperty[] docProperties = new IDocProp

这段代码抛出错误 此方法使用从键集迭代器检索的键访问映射项的值。在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;
    }
if(docPropertiesMap!=null){
迭代器属性=docPropertiesMap.keySet().Iterator();
IDocProperty[]docProperties=新IDocProperty[docPropertiesMap
.size()];
int-iArrIndex=0;
while(properties.hasNext()){
String strPropName=properties.next();
String[]propValue=docPropertiesMap.get(strPropName);
IDocProperty docProperty=(IDocProperty)FDMAFactory
.getDataObject(“DocProperty”);
setPropertyName(strPropName);
setArrPropertyValues(propValue);
docProperties[iArrIndex++]=docProperty;
}
元数据.setArrDocProperties(docProperties);
返回元数据;
}

这是来自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;
}
if(docPropertiesMap!=null){
IDocProperty[]docProperties=新的IDocProperty[docPropertiesMap.size()];
int-iArrIndex=0;
对于(Map.Entry:docPropertiesMap.entrySet()){
String strPropName=entry.getKey();
字符串[]propValue=entry.getValue();
IDocProperty docProperty=(IDocProperty)FDMAFactory.getDataObject(“docProperty”);
setPropertyName(strPropName);
setArrPropertyValues(propValue);
docProperties[iArrIndex++]=docProperty;
}
元数据.setArrDocProperties(docProperties);
返回元数据;
}

请看一看类似的问题: