À l'aide de ConcurrentHashMap efficacement?

J'ai une Application Android dont la principale composante est un HashMap<String,float[]>.
Le Système est d'avoir élevé la concurrence. e.g
voici trois situations qui se produisent fréquemment et ils sont très chevauchement dans la nature

  1. Parcourir toutes les clés dans la table de hachage et de faire quelques opérations sur
    sa valeur(en lecture seule des opérations).
  2. Ajouter de nouvelles clés,des paires de valeurs dans la table de hachage.
  3. Supprimer Certaines touches à partir de la table de hachage.

Je faire toutes ces opérations dans différents threads et suis donc à l'aide d'un ConcurrentHashMap depuis une certaine incohérence dans les récupérations ne marche pas question. e.g lors de l'itération de la carte,si de nouvelles données sont ajoutées ensuite, il importe de ne pas lire dans ces nouvelles valeurs immédiatement que je m'assurer que la prochaine fois qu'ils sont lus .

Aussi, tout en supprimant les entrées je suis recréer l'itérateur à chaque fois pour éviter les "ConcurrentModificationException"

Suppose , il y a un hashmap(j'.e ConcurrentHashmap)

ConcurrentHashMap<String,float[]> test=new ConcurrentHashMap<String, float[]>(200);

Maintenant pour la Récupération je ne les suivants

Iterator<String> reader=test.keySet().iterator();
            while(reader.hasNext())
            {
                String s=reader.next();
                float[] temp=test.get(s);
                //do some operation with float[] temp here(read only operation)
            }

et pour la suppression je ne les suivants

boolean temp = true;
        while (temp) {
            for (String key : test.keySet()) {
                temp = false;
                if (key.contains("abc")) {
                    test.remove(key);
                    temp = true;
                    break;
                }
            }
        }

et lors de l'insertion de nouvelles valeurs je n'ai tout simplement

test.put("temp value", new float[10]);

Je ne suis pas sûr si c'est un très efficace d'utilisation. Aussi, il importe de ne pas lire dans supprimés valeurs(cependant j'ai besoin d'efficacité ,et depuis l'itérateur est de nouveau créé lors de l'appel de la fonction,sa garantie que la prochaine fois je n'ai pas l'enlevé valeurs), de sorte que beaucoup d'incohérence peut être toléré?

Quelqu'un pourrait-il m'en dire un moyen efficace de le faire?

PS. J'ai oublié de mentionner que pourquoi je suis en train de faire l'opération de suppression d'une telle manière.
J'ai maintenant des changements de la condition de ses supprimés à partir d'égal contient(il y a peut être des piqûres multiples ayant le préfixe "abc", suivi par les différents suffixes. j'ai donc besoin de supprimer tous ceux.

  • Il n'est certainement pas efficace pour itérer l'ensemble de la carte pour supprimer une entrée. Pourquoi ne pas simplement appeler supprimer("abc")?
  • Oui oups j'ai maintenant changé la suppression de la condition d'contient..
  • Non, vous devez changer le bloc entier à un seul appel à supprimer(). Vous n'avez pas besoin d'autre chose, et je ne comprends pas pourquoi vous pensez le contraire. -1