web-dev-qa-db-fra.com

Itération et suppression de Hashtable dans Java

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?

38
Mohit BAnsal

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();
  }
}
42
Adamski

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);
}
41
mostar

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

6
Scharrels

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
 }
6
polygenelubricants