[JAVA] Map keySet, Werte sollten nicht verwendet werden

Ich habe eine Warnung erhalten, dass ich "entrySet ()" in Findbugs verwenden kann, auch wenn Code nur Schlüssel wie ↓ verwendet.

for(var key : map.keySet()){
    // map.get(key)Verarbeitung, bei der nur der Schlüssel verwendet wird, ohne dass etwas unternommen wird
}

Ich habe interpretiert, dass "entrySet ()" effizienter ist, wenn sowohl Schlüssel als auch Wert ** verwendet werden. Wenn also nur einer verwendet wird, hängt dies nicht mit der Effizienz zusammen? Da "Eintrag <K, V>" sowohl Schlüssel als auch Wert hat, denke ich, dass eine der unnötigen Ressourcen verschwendet wird, und werde mich daher mit der internen Implementierung für den Trade-In befassen.

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();
                        
                        //Abkürzung

                    };
                }
            };
            keySet = ks;
        }
        return ks;
    }

Wenn kein keySet vorhanden ist, wird es erstellt und im Feld gespeichert. Es ist jedoch ersichtlich, dass "entrySet (). Iterator ()" aufgerufen wird, um "Iterator " zu initialisieren. Schließlich scheinen "keySet ()" und "values ()" "entrySet ()" zu durchlaufen.

Mit anderen Worten, die Warnung, dass Sie "entrySet ()" verwenden sollten, um das Denken zu beenden, selbst wenn Sie nur einen der Schlüssel oder Werte haben, war ** richtig **.

Recommended Posts

Map keySet, Werte sollten nicht verwendet werden
[Java] Wann var verwendet werden soll und wann nicht
Gekitsuyo Rest Template sollte für die REST-Kommunikation verwendet werden
[RubyOnRails] Für welche Art von Daten sollte active_hash verwendet werden?
Der Fall, dass @Autowired in JUnit5 nicht verwendet werden konnte