# Eine HashMap Methode



## JavatarAang (24. Mai 2018)

Hallo Leute,
ich müsste eine methode Programmieren. Es geht darum dass ich ein Value (String p) angeben soll und  falls das gegebene Value in Map enthalten ist soll er sie löschen:

mit for-each Schleife kam es zur einer exception. Deshalb benütze ich hier den Iterator.
Wenn ich die methode ausführe passiert einfach nichts.
(noch am rande, kann mir jemand den unterschied zwischen Iterator und einer for-each Schleife sagen ?)
Vielen Dank im voraus ))

```
public void deleteEntriesOfAPerson(String p) {

       Iterator<Map.Entry<Integer, String>> it = book.entrySet().iterator();

       while (it.hasNext()) {
           Entry elem = it.next();

           if (elem.getValue() == p) {

               it.remove();

           }

       }

   }
```


----------



## Xyz1 (24. Mai 2018)

Kaskadiertes Entfernen/Löschen oder was soll es werden?

Der obige Code sieht richtig aus


----------



## JavatarAang (24. Mai 2018)

@DerWissende 

Er soll per parameter Eintrag durch die map iterieren, gucken welche Value mit dem Parameter gleich ist und diesen Eintrag dan löschen (Deletes all phone book entries of a specified person.) 
Beispiel:

Key-Value:
123 , Bernd  <- soll Löschen
456 , Bernd  <- soll Löschen
789 , Lisa

hoffe ist verständlich genug.


----------



## httpdigest (24. Mai 2018)

> if (elem.getValue() == p) {


Strings IMMER IMMER IMMER mit equals() vergleichen und nicht mit ==.


----------



## Javinner (24. Mai 2018)

@JavatarAang 
Schau dir HashMap und die Methoden genau an  
Da haben die Leute die Vorarbeit längst geleistet:

```
public class Beispiel
{
    public static void main(String[] args)
    {
        HashMap<String, Integer> map = new HashMap<>();
        map.put("FIRST", 1);
        map.put("SECOND", 2);
        System.out.println(Arrays.asList(map));
        String second = "SECOND";
        if (map.containsKey(second))
        {
            map.remove(second);
        }
        System.out.println(Arrays.asList(map));
    }
}
/** Output */
[{SECOND=2, FIRST=1}]
[{FIRST=1}]
```


----------



## JavatarAang (24. Mai 2018)

#CLOSE 
@DerWissende 
 Ich hasse kleine fehler. Hab vergessen methode auszuführen und erst dann die syso auszuführen  Tut mir leid.


----------



## mrBrown (24. Mai 2018)

JavatarAang hat gesagt.:


> (noch am rande, kann mir jemand den unterschied zwischen Iterator und einer for-each Schleife sagen ?)


Bei einer Schleife wird einfach über alle Elemente iteriert, ohne dass du Kontrolle darüber hast. Wenn du direkt Interator nutzt, hast du die Kontrolle über die Iteration.




JavatarAang hat gesagt.:


> Ich hasse kleine fehler. Hab vergessen methode auszuführen und erst dann die syso auszuführen  Tut mir leid.


In diesem Fall lag der Fehler allerdings auch am Code 



Javinner hat gesagt.:


> Schau dir HashMap und die Methoden genau an
> Da haben die Leute die Vorarbeit längst geleistet:


Das if um das remove ist btw überflüssig, intern wird auch noch geprüft, ob der Wert enthalten ist


----------



## Javinner (24. Mai 2018)

@mrBrown 
In der Tat! Noch besser


----------



## Xyz1 (24. Mai 2018)

JavatarAang hat gesagt.:


> #CLOSE


Klingt zwar unfreundlich,
aber Du hast das nicht zu bestimmen.

fore erfordert ein Iterable,
und der Iterator bleibt intern.

Das mit der Kontrolle von @mrBrown die entfällt ist wohl in allen erdenklichen Anwendungsfällen schlecht.


----------



## mrBrown (24. Mai 2018)

Javinner hat gesagt.:


> Schau dir HashMap und die Methoden genau an
> Da haben die Leute die Vorarbeit längst geleistet:


Oh, und das Arrays.asList ist Unsinn, das führt in dem Fall dazu, das ein Ein-Elemetiges Array mit der Map als Inhalt erstell wird, einfach die Map ausgeben ist passender


----------



## Javinner (25. Mai 2018)

@mrBrown 
Das stimmt auch, mit toString() klappt es wunderbar


----------

