/ / HashMap supprimer une entrée ET une position - java, hashmap

HashMap supprimer l'entrée ET la position - java, hashmap

Je travaille juste avec HashMaps et maintenant, il se pose une question à laquelle je ne peux pas réellement répondre par moi-même ...

Dans mon HashMap, il y a quelques entrées. Je cherche maintenant une valeur dans toutes les entrées. Si cette valeur est trouvée, supprimez-la en utilisant hashmap.remove();. Mais je "t" seulement "veux supprimer l'entrée maisl'ensemble de la "position" de la carte de hachage, de sorte qu'il n'y ait pas d'espace vide entre elle. En fin de compte, le HashMap ne devrait plus avoir aucune valeur (je pense que ce sera nul alors, ne le gagnera-t-il pas?)

Y a-t-il un moyen possible de le faire?

C’est ce que j’ai eu jusqu’à présent, mais cela ne fait que supprimer l’entrée, pas toute la position ...

for (Entry<Integer, String> entry : myMap.entrySet()) {
if (entry.getValue().contains("EnterStringHere")) {
myMap.remove(entry);
}
}

Réponses:

1 pour la réponse № 1

C'est faux

for (Entry<Integer, String> entry : myMap.entrySet()) {
if (entry.getValue().contains("EnterStringHere")) {
myMap.remove(entry); // you should pass the key to remove
}
}

Mais vous ne pouvez pas utiliser cette méthode pour supprimer un élément. Vous obtiendrez ConcurrentModificationException.

Vous pouvez essayer de cette façon en utilisant iterator supprimer un élément en itérant.

 Map<Integer,String> map=new HashMap<>();
map.put(1,"EnterStringHere");
map.put(2,"hi");
map.put(3,"EnterStringHere");
Iterator<Map.Entry<Integer,String>> iterator=map.entrySet().iterator();
while (iterator.hasNext()){
Map.Entry<Integer,String> entry=iterator.next();
if(entry.getValue().equals("EnterStringHere")){
iterator.remove();
}
}
System.out.println(map);

Out mis:

 {2=hi}

Tu as vraiment besoin de voir HashMap # remove ()


1 pour la réponse № 2

Vous ne pouvez pas supprimer l'objet d'entrée d'une carte. La méthode remove attend la clé.

Au lieu de cela, vous pouvez essayer ce qui suit: -

Iterator<Entry<Integer, String>> itr = myMap.entrySet().iterator();

while(itr.hasNext()) {
Entry<Integer, String> entry = itr.next();
if (entry.getValue().contains("EnterStringHere"))
{
itr.remove();
}
}

De plus, vous ne pouvez pas modifier directement la structure d'unCarte tout en itérant sinon vous obtiendrez une exception ConcurrentModification. Pour éviter cela, vous devez supprimer en utilisant la méthode remove de l'itérateur, comme indiqué dans le code ci-dessus.


0 pour la réponse № 3

Disons que vous avez un Map<Key,Value> taille de 10 et vous voulez enlever 8e paire de valeurs de clé en cours Map. Qu'est-ce qui se passe est Map devenir la taille de 9 et il y aura une autre paire de valeurs clés 8la position.

Vous ne pouvez pas aller au-delà de cela avec remove(). Vous ne pouvez pas supprimer la position.

Mais quand tu utilises Map.get(removed_key) tu auras null car il n'y a pas de clé là maintenant.

Par exemple:

Map<String,Integer> map=new HashMap<>();
map.put("a",1);
map.put("b",2);
map.put("c", 3);
System.out.println("size of the map "+map.size() +" map is "+map);
map.remove("b");
System.out.println("size of the map "+map.size() +" map is "+map);
System.out.println(map.get("b"));

Out mis:

size of the map 3 map is {b=2, c=3, a=1}
size of the map 2 map is {c=3, a=1}
null // you are getting null since there is no key "b"

Ajouter ceci pour fournir une réponse à votre commentaire, si vous voulez vérifier si la carte est vide. simplement utiliser map.isEmpty()


0 pour la réponse № 4

Comprendre comment HashMap travaille ici Lien. Voir aussi java doc ici lien.

Si vous voulez configurer votre hashmap dans le pack, essayez de vérifier la taille de la carte, puis supprimez-en une, puis vérifiez à nouveau la taille, par exemple.

hashmap.size();        => 10
hashmap.remove(obj);
hashmap.size()         => 9

cela signifie que le hashmap est compressé et ne contiendra aucune entrée vide. À la fin, hashmap ne contiendra automatiquement aucune valeur.


0 pour la réponse № 5

Parce qu'après un certain temps, je dois vérifier sile HashMap est vide. Mais une autre réponse semble avoir l'allusion dont j'avais besoin. Si je supprime la valeur, l'entrée sera nulle? Puis-je vérifier si chaque entrée est nulle facilement ou dois-je parcourir à nouveau chaque entrée?

Vous ne supprimez pas une valeur d'une carte, vous supprimez un mappage. ce code ne supprime rien:

myMap.remove(entry);

parce que vous transmettez l’objet d’entrée, vous devez transmettre la clé du mappage afin de le supprimer, voir Map.html # remove docs.

Ainsi

myMap.remove(entry.getkey());

Cependant, avec l'approche actuelle, vous courrez ConcurrentModificationException. Si ce n’est pas le cas jusqu’à présent, c’est parce que votre code n’a rien supprimé, parce que vous passez l'objet d'entrée

Si vous supprimez le mappage de la carte, ce mappage n'existe plus dans la carte. Si le seau est null ou non est le détail de la mise en œuvre, mais lorsque vous interrogez un mappage qui a été supprimé à l'aide de la clé donnée, vous obtenir null comme valeur de retour. Si vous ajoutez un autre mappage avec la même clé, vous obtiendrez à nouveau ce mappage.

Vous pouvez vérifier si une carte est vide en utilisant Carte # isEmptyAinsi, vous n'avez pas besoin de vérifier si chaque entrée est nulle ou d'itérer sur la carte entière pour le faire.

Vous pouvez vérifier si une carte contient une carte pour une clé en utilisant Carte. # ContientLa clé

Vous pouvez vérifier si une carte contient au moins une correspondance pour une valeur en utilisant Carte # contientValeur

la bonne façon de supprimer etriey d'une carte tout en l'utilisant pour utiliser un iterator

Iterator<Entry<Integer, String>> iterator = myMap.entrySet().iterator();
while(iterator.hasNext()) {
Entry<Integer, String> entry = iterator.next();
if (entry.getValue().contains("foo")) {
iterator.remove();
}
}

Depuis que tu as Map<Integer, String> Je suppose que le position vous voulez dire est la clé entière, où vous faites quelque chose comme myMap.put(1, "."), myMap.put(2, ".."), myMap.put(3, "...") etc. Dans ce cas, si vous supprimez le mappage de la clé 1 par exemple, la position, c'est-à-dire la cartographie {1 : "."} n'existera plus dans la carte.


-1 pour la réponse № 6

OK, j’ai un exemple codable qui est assez facile.

public class TestingThingsOut {

public static void main(String [] args) {
HashMap<Integer, String> myMap = new HashMap<Integer, String>();

myMap.put(123, "hello");
myMap.put(234, "Bye");
myMap.put(789, "asdf");

System.out.println(myMap); // it says:
{789=asdf, 234=Bye, 123=hello}

System.out.println(myMap.size()); // it says: "3"

for (Entry<Integer, String> entry : myMap.entrySet()) {
if (entry.getValue().contains("hello")) {
myMap.remove(entry);
}
}

System.out.println(myMap); // it says:
{789=asdf, 234=Bye, 123=hello}

System.out.println(myMap.size()); // it says: "3" again
}

}