Skip to content
This repository has been archived by the owner on Jul 23, 2024. It is now read-only.

Ej6 - TP7 #15

Open
SrMathew opened this issue Nov 6, 2023 · 2 comments
Open

Ej6 - TP7 #15

SrMathew opened this issue Nov 6, 2023 · 2 comments

Comments

@SrMathew
Copy link

SrMathew commented Nov 6, 2023

Buenas noches profe,

Escribo para consultarle si es correcto, como se ha hecho en otras ocasiones que hemos usado TreeSet(), utilizar un iterador en el método remove() de la clase MultiMapImpl.

Adjunto todo el código correspondiente a la misma:

public class MultiMapImpl<K,V extends Comparable<? super V>> implements MultiMap<K,V>{

    private Map<K, Set<V>> multiMap = new HashMap<>();

    @Override
    public void put(K key, V value) {
        multiMap.putIfAbsent(key, new TreeSet<V>(Comparator.reverseOrder()));
        multiMap.get(key).add(value);
    }

    @Override
    public int size() {
        int accum = 0;
        for( K key: multiMap.keySet()){
            accum += multiMap.get(key).size();
        }
        return accum;
    }

    @Override
    public int size(K key) {
        if (!multiMap.containsKey(key)) {
            return 0;
        }
        return multiMap.get(key).size();
    }

    @Override
    public void remove(K key) {
        multiMap.remove(key);
    }

    @Override
    public void remove(K key, V value) {
        if ( multiMap.containsKey(key) ) {
            Iterator<V> iterator = multiMap.get(key).iterator();
            boolean found = false;
            while ( iterator.hasNext() && !found) {
                if ( iterator.next().equals(value) ) {
                    iterator.remove();
                    found = true;
                }
            }
        }
    }

    @Override
    public Iterable<V> get(K key) {
        return multiMap.get(key);
    }
    
}

Desde ya muchas gracias

@fmeola
Copy link
Member

fmeola commented Nov 6, 2023

Hola.
Sí, es equivalente usar Iterator#remove o el Collection#remove planteado en la solución. Como es un TreeSet, ambas implican un recorrido por la colección así que la eficiencia es equivalente.
Fijate que el método MultiMapImpl#size se puede mejorar. Estás iterando por las claves y haciendo un get en cada iteración cuando podrías iterar directamente por los valores y ahorrarte todos esos accesos al mapa.

@SrMathew
Copy link
Author

SrMathew commented Nov 6, 2023

Perfectoo, muchas gracias por la corrección

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants