HashMap Rechercher une partie d’une clé?

J’utilise actuellement HashMap qui est rempli de clés de type Ssortingng qui ont toutes, disons, une longueur de 5 caractères. Comment puis-je rechercher une clé spécifique de 4 caractères ou moins, qui fait partie et se trouve au début de certaines autres clés et obtenir tous les hits en tant que collection de ?

Itérer est votre seule option, sauf si vous créez une structure de données personnalisée:

 for (Entry e : map.entrySet()) { if (e.getKey().startsWith("xxxx")) { //add to my result list } } 

Si vous avez besoin de plus de temps, vous aurez besoin d’une implémentation de map dans laquelle vous suivez ces clés partielles.

Cela ressemble à un cas d’utilisation de TreeMap plutôt que de HashMap . La différence est que TreeMap préserve l’ordre. Vous pouvez donc trouver votre correspondance partielle beaucoup plus rapidement. Vous n’êtes pas obligé de parcourir toute la carte.

Cochez cette question Recherche partielle dans HashMap

Vous ne pouvez pas faire cela via HashMap , vous devez écrire votre propre implémentation pour Map afin d’implémenter une recherche basée sur la longueur de chaîne dans une map.

 Map result = new HashMap; for(Ssortingng key : yourMap.keySet()) { if(key.length() == 4){ result.put(key, yourMap.get(key); } } 

Après avoir exécuté ce code, vous obtenez toutes les paires clé / valeur avec 4 clés de lettre dans le result .

 Set> s1 = map.entrySet(); for (Entry entry : s1) { if(entry.getKey().length == 4) //add it to a map; } 

Commencez par définir l’entrée sur votre hashmap. Parcourez l’ensemble, vérifiez la longueur de chaque clé et ajoutez-la à une carte ou utilisez-la comme vous le souhaitez.

Par exemple:

 public static void checkMap(Map mp) { Iterator it = mp.entrySet().iterator(); while (it.hasNext()) { Map.Entry pairs = (Map.Entry)it.next(); System.out.println(pairs.getKey().toLowerCase().contains("YourSsortingng")) } } 

Ce code sera vrai pour les keys contenant votre subssortingngsubssortingng .

Avec HashMap vous ne pouvez utiliser keySet() et ne contains() pour les clés Ssortingng et votre modèle.

Comme il a été noté, il n’existe pas de moyen extrêmement efficace * de le faire avec la structure de données que vous avez spécifiée. Toutefois, si vous ajoutez une mappe Map> supplémentaire pour garder une trace du mappage de la longueur de chaîne sur la liste de toutes les clés de cette longueur, vous pourrez le faire très efficacement.

* En utilisant uniquement la carte , vous auriez besoin de parcourir la totalité de la capacité de la carte plus grande, tandis que l’ajout de cette structure de données supplémentaire imposerait une recherche O (1) (en supposant que vous utilisiez une HashMap) suivie d’une itération juste l’ensemble de résultats, qui est le résultat le plus rapide possible.

Vous pouvez essayer cette approche:

 public Map filterMap(Map inputMap){ Map resultHashMap = new HashMap(); for (Ssortingng key : inputMap.keySet()) { if(key.length()==5){ resultHashMap.put(key,inputMap.get(key)); } } return resultHashMap; }