J'ai une table hachage en Java et je souhaite parcourir toutes les valeurs de la table et supprimer une paire clé-valeur particulière pendant l'itération.Itération et suppression de Hashtable dans Java
Comment cela peut-il être fait?
J'ai une table hachage en Java et je souhaite parcourir toutes les valeurs de la table et supprimer une paire clé-valeur particulière pendant l'itération.Itération et suppression de Hashtable dans Java
Comment cela peut-il être fait?
Vous devez utiliser un explicite java.util.Iterator
itérer sur l'entrée de Map
établi plutôt que d'être en mesure d'utiliser la syntaxe améliorée Pour boucle disponible en Java 6. Les itère exemple suivant sur une Map
de Integer
, String
paires, supprimant toute entrée dont Integer
clé est nul ou égal à 0.
Map<Integer, String> map = ...
Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Integer, String> entry = it.next();
// Remove entry if key is null or equals 0.
if (entry.getKey() == null || entry.getKey() == 0) {
it.remove();
}
}
Vous ne pouvez pas avoir les clés 'null' dans un' Hashtable'. C'est ce qui le rend différent d'un 'Map'. En outre, vous interrogez 'Map.Entry getValue' dans le code ci-dessus, au lieu de' getKey'. Vous ne pouvez pas faire 'entry.getValue() == 0' car les valeurs sont de type' String'. – polygenelubricants
@polygenelubricants, Map est une interface qui ne fait aucune restriction sur null. HashMap est une implémentation Map qui n'autorise pas les valeurs nulles. –
Je ne référence pas Hashtable dans mon code et je ne l'utiliserais pas car il est remplacé par HashMap (qui ** autorise ** les clés et les valeurs NULL). – Adamski
Vous pouvez utiliser une liste de suppression temporaire:
List<String> keyList = new ArrayList<String>;
for(Map.Entry<String,String> entry : hashTable){
if(entry.getValue().equals("delete")) // replace with your own check
keyList.add(entry.getKey());
}
for(String key : keyList){
hashTable.remove(key);
}
Vous pouvez trouver plus d'informations sur les méthodes Hashtable dans le Java API
Vous pouvez le faire mais il n'est pas nécessaire d'utiliser une collection supplémentaire; Cela rend les choses plus compliquées. – Adamski
Donc vous connaissez la clé, paire de valeur que vous souhaitez supprimer à l'avance? Il est juste beaucoup plus clair pour le faire, alors:
table.delete(key);
for (K key: table.keySet()) {
// do whatever you need to do with the rest of the keys
}
Je ne connaissais que la valeur, donc cela ne marchera pas. Merci de regarder –
Vous pouvez utiliser Enumeration
:
Hashtable<Integer, String> table = ...
Enumeration<Integer> enumKey = table.keys();
while(enumKey.hasMoreElements()) {
Integer key = enumKey.nextElement();
String val = table.get(key);
if(key==0 && val.equals("0"))
table.remove(key);
}
Idem pour HashMap et d'autres cartes: http://stackoverflow.com/questions/46898/iterate-over -each-entry-in-a-map –