J'ai été prévenu que je pourrais utiliser ʻentrySet () `dans findbugs même avec du code qui n'utilise que la clé comme ↓.
for(var key : map.keySet()){
// map.get(key)Traitement qui n'utilise que la clé sans rien faire
}
J'ai interprété que ʻentrySet () est plus efficace si la clé et la valeur ** sont utilisées, donc si une seule est utilisée, n'est-ce pas lié à l'efficacité? Plutôt, ʻEntry <K, V>
a à la fois la clé et la valeur, donc je pense qu'une des ressources inutiles est gaspillée, donc je vais regarder la mise en œuvre interne pour l'échange.
AbstractMap.java
public Set<K> keySet() {
Set<K> ks = keySet;
if (ks == null) {
ks = new AbstractSet<K>() {
public Iterator<K> iterator() {
return new Iterator<K>() {
private Iterator<Entry<K,V>> i = entrySet().iterator();
//Abréviation
};
}
};
keySet = ks;
}
return ks;
}
S'il n'y a pas de keySet, il est créé et stocké dans le champ, mais vous pouvez voir que ʻentrySet (). Iterator () est appelé pour initialiser ʻIterator <K>
.
Après tout, il semble que keySet ()
et values ()
passent par ʻentrySet () `.
En d'autres termes, l'avertissement que vous devez utiliser ʻentrySet () `pour arrêter de penser, même si une seule des clés ou des valeurs, était ** correct **.
Recommended Posts