Ho un Hashtable in Java e voglio eseguire un'iterazione su tutti i valori nella tabella ed eliminare una coppia di valori-chiave durante l'iterazione.Iterating over e delete da Hashtable in Java
Come si può fare?
Ho un Hashtable in Java e voglio eseguire un'iterazione su tutti i valori nella tabella ed eliminare una coppia di valori-chiave durante l'iterazione.Iterating over e delete da Hashtable in Java
Come si può fare?
è necessario utilizzare un esplicito java.util.Iterator
di iterare l'ingresso s' il Map
set piuttosto che essere in grado di utilizzare la sintassi migliorata per-loop disponibili in Java 6. Il seguente esempio itera su un Map
di Integer
, String
coppie, la rimozione di una voce la cui Integer
chiave è nulla o uguale a 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();
}
}
Non è possibile avere chiavi 'null' in un' Hashtable'. Questo è ciò che lo rende diverso da una 'Mappa'. Inoltre, stai interrogando 'Map.Entry getValue' nel codice sopra, invece di' getKey'. Non puoi fare 'entry.getValue() == 0' perché i valori sono di tipo' String'. – polygenelubricants
@polygenelubricants, Map è un'interfaccia che non applica restrizioni su null. HashMap è un'implementazione di mappe che non consente valori nulli. –
Non faccio riferimento a Hashtable nel mio codice e non lo userei comunque poiché è sostituito da HashMap (che ** fa ** consente chiavi e valori nulli). – Adamski
è possibile utilizzare una temporanea lista cancellazione:
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);
}
È è possibile trovare ulteriori informazioni sui metodi di Hashtable nello Java API
È possibile farlo ma non è necessario utilizzare una raccolta aggiuntiva; Rende solo le cose più complicate. – Adamski
Quindi si conosce la coppia di valori chiave che si desidera eliminare in anticipo? E 'solo molto più chiaro per fare questo, allora:
table.delete(key);
for (K key: table.keySet()) {
// do whatever you need to do with the rest of the keys
}
conoscevo solo il valore, quindi non funzionerà. Grazie per aver guardato –
È possibile utilizzare 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);
}
Lo stesso per HashMap e altre mappe: http://stackoverflow.com/questions/46898/iterate-over -each-entry-in-a-map –