J'ai une table de hachage dans Java et je souhaite parcourir toutes les valeurs du tableau et supprimer une paire clé-valeur particulière pendant l'itération.
Comment cela peut-il se faire?
Vous devez utiliser un Java.util.Iterator
Explicite pour parcourir le jeu d'entrées de Map
plutôt que de pouvoir utiliser la syntaxe améliorée de boucle For disponible dans Java 6. L'exemple suivant parcourt une paire Map
de Integer
, String
, supprimant toute entrée dont la clé Integer
est nulle ou égale à 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 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);
}
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 de Hashtable dans Java API
Vous connaissez donc la paire clé/valeur que vous souhaitez supprimer à l'avance? Il est juste beaucoup plus clair de le faire, alors:
table.delete(key);
for (K key: table.keySet()) {
// do whatever you need to do with the rest of the keys
}