Перебор и удаление из Hashtable в Java

Только для разнообразия:

template <typename T, typename U>
bool allequal(const T &t, const U &u) {
    return t == u;
}

template <typename T, typename U, typename... Others>
bool allequal(const T &t, const U &u, Others const &... args) {
    return (t == u) && allequal(u, args...);
}

if (allequal(a,b,c,'X') || allequal(a,b,c,'O')) { ... }
37
задан CJBS 22 September 2015 в 16:44
поделиться

3 ответа

Вам нужно использовать явный java.util.Iterator для итерации по набору записей Map , а не использовать расширенный For- синтаксис цикла, доступный в Java 6. В следующем примере выполняется итерация пары Map из Integer , String , удаляя любую запись, имеющую ключ Integer равно нулю или равно 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();
  }
}
43
ответ дан 27 November 2019 в 03:16
поделиться

Итак, вы заранее знаете пару ключ-значение, которую хотите удалить? Тогда это будет намного яснее:

 table.delete(key);
 for (K key: table.keySet()) {
    // do whatever you need to do with the rest of the keys
 }
6
ответ дан 27 November 2019 в 03:16
поделиться

Вы можете использовать список временного удаления:

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

Вы можно найти дополнительную информацию о методах Hashtable в Java API

7
ответ дан 27 November 2019 в 03:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: