Abstract Function HashMap

di il
5 risposte

Abstract Function HashMap

Salve a tutti, ho concluso un progetto e come richiesta ho anche di fornire l'implementazione delle mie classi (Abstract Function e Rep Invariant). Sto trovando difficoltà nel definire la AF della mia HashMap<String, HashSet<E>>: ho una HashMap dove ogni String corrisponde a una serie (HashSet) di dati di tipo E.
Nella AF lo scopo è descrivere la struttura utilizzata usufruendo dei metodi di quest'ultima, dovrei descrivere una relazione del genere

HashMap <String, HashSet<E>> elements;

<elements.String_0 , elements.values() di 1 , <elements.String_1, elements.values() di 2> eccetera. Però non ho idea di come poterlo fare con il codice, l'HashMap non si comporta come una Lista, non so come prendere l'elemento String, uno per uno, e poi associarci tutti i valori nel campo di destra.

So che la domanda è confusionaria ma spero che qualcuno mi aiuterà.

5 Risposte

  • Re: Abstract Function HashMap

    RussBear ha scritto:


    l'HashMap non si comporta come una Lista, non so come prendere l'elemento String, uno per uno
    Sì, HashMap non è una "lista". MA puoi ottenere:

    - il Set delle chiavi (su cui puoi iterare): keySet()
    - il Set delle entry (su cui puoi iterare): entrySet()
    - la Collection dei valori (su cui puoi iterare): values()

    Se è questo che intendevi ....
  • Re: Abstract Function HashMap

    andbin ha scritto:


    RussBear ha scritto:


    l'HashMap non si comporta come una Lista, non so come prendere l'elemento String, uno per uno
    Sì, HashMap non è una "lista". MA puoi ottenere:

    - il Set delle chiavi (su cui puoi iterare): keySet()
    - il Set delle entry (su cui puoi iterare): entrySet()
    - la Collection dei valori (su cui puoi iterare): values()

    Se è questo che intendevi ....
    Si so i comandi di HashMap, il problema è che non so come creare la relazione con quelli che ho a disposizione. Ti faccio un esempio di farei un AF con ArrayList, se per esempio avessi un tipo di dato Category<E> definito da un nome String e un ArrayList<Int> elements che contiene i suoi elementi, farei così la sua AF:

    AF(c) <c.getName() , {elements.get(i)}> con 0<=i<elements.size() DOVE getName() è un metodo che sarebbe appositamente creato per restituire il nome di Category<E>

    Come posso fare una cosa simile in HashMap? Mi servirebbe scannerizzare tutte le chiavi e "associarci" i valori e farlo poi con le restanti,
    Key_0 , valori di 0> eccetera ma con comandi della HashMap
  • Re: Abstract Function HashMap

    La tua descrizione sinceramente e' un po confusionale ma se ti interessa semplicemente iterare per ogni chiave della HashMap (ricordando che l'ordine di iterazione NON e' garantito con HashMap) ti basta :
    
    for(Entry<String,HashSet<String>> entry : map.entrySet()){
    	HashSet<String> currSet = entry.getValue();
    	//oppure qualche azione sul set ?
    	currSet.add("elemento");
    }
    
    
    Come mai utilizzare un Set, hai bisogno esplicitamente di filtrare via duplicati? Altrimenti basta un ArrayList<String>.
  • Re: Abstract Function HashMap

    magicsign ha scritto:


    La tua descrizione sinceramente e' un po confusionale ma se ti interessa semplicemente iterare per ogni chiave della HashMap (ricordando che l'ordine di iterazione NON e' garantito con HashMap) ti basta :
    
    for(Entry<String,HashSet<String>> entry : map.entrySet()){
    	HashSet<String> currSet = entry.getValue();
    	//oppure qualche azione sul set ?
    	currSet.add("elemento");
    }
    
    
    Come mai utilizzare un Set, hai bisogno esplicitamente di filtrare via duplicati? Altrimenti basta un ArrayList<String>.
    I duplicati sono esclusi, lo faccio anche tramite appositi controlli e poi lancio una eccezione. Ma il motivo per cui ho usato HashSet dentro l'HashMap è che devo usare strutture diverse per creare due implementazioni, e nella prima avevo usato solo ArrayList.
    Comunque quello che chiedevo non riguarda fare qualcosa sul codice, devo trovare un modo di esprimere la relazione tra gli elementi in notazione matematica/codice e metterla in un commento
  • Re: Abstract Function HashMap

    Prova a mostrarci un esempio pratico anche con pseudocode perche' sinceramente non ho capito la relazione che stai cercando di esprimere
Devi accedere o registrarti per scrivere nel forum
5 risposte