J'ai le hashmap suivant en Java:
{B046 = 0.0, A061 = 3.0, A071 = 0.0, B085 = 0.0, B075 = 3.0, B076 = 9.0, B086 = 3.0, B095 = 0.0, B096 = 0.0, A052 = 0.0, B066 = 0.0, B056 = 9.0, B065 = 0.0, B055 = 9.0}
Comment dois-je procéder pour trier la table de hachage de sorte que l'alphabet, suivi des chiffres, soit pris en compte?
Le hashmap résultant devrait ressembler à ceci:
{A052 = 0.0, A061 = 3.0, A071 = 0.0, B046 = 0.0, B055 = 9.0, B056 = 9.0, B065 = 0.0, B066 = 0.0, B075 = 3.0, B076 = 9.0, B085 = 0.0, B086 = 3.0, B095 = 0.0, B096 = 0.0}
Appréciez l'aide!
Utilisez la variable TreeMap
triée:
Map<String, Float> map = new TreeMap<>(yourMap);
Il mettra automatiquement les entrées triées par clés. Je pense que la commande naturelle String
ira bien dans votre cas.
Notez que HashMap
en raison d'optimisations de recherche ne conserve pas l'ordre.
Utilisez une TreeMap avec un comparateur personnalisé.
class MyComparator implements Comparator<String>
{
public int compare(String o1,String o2)
{
// Your logic for comparing the key strings
}
}
TreeMap<String, Float> tm = new TreeMap<String , Float>(new MyComparator());
Au fur et à mesure que vous ajoutez de nouveaux éléments, ils seront automatiquement triés.
Dans votre cas, il peut même ne pas être nécessaire d'implémenter un comparateur car le classement des chaînes peut être suffisant. Mais si vous souhaitez implémenter des cas spéciaux, tels que les minuscules alphas avant les majuscules, ou traiter les nombres d’une certaine manière, utilisez le comparateur.
TreeMap
est votre meilleur choix pour ce type de tri (naturel). TreeMap
trie naturellement en fonction des clés.
HashMap
ne préserve pas l'ordre d'insertion et ne trie pas la carte. LinkedHashMap
conserve l'ordre d'insertion mais ne trie pas la carte automatiquement. Seule TreeMap
dans l'interface Map
trie la carte selon l'ordre naturel (chiffres en premier, alphabet en majuscule en second, alphabet en minuscule en dernier).
Utilisez un TreeMap , bien qu’avoir une carte "ressemblante" soit un peu nébuleuse - vous pouvez également trier les clés en fonction de vos critères et les parcourir sur la carte, en récupérant chaque objet.
En utilisant le TreeMap vous pouvez trier la carte.
Map<String, String> map = new HashMap<String, String>();
Map<String, String> treeMap = new TreeMap<String, String>(map);
//show hashmap after the sort
for (String str : treeMap.keySet()) {
System.out.println(str);
}
Utilisez simplement une TreeMap
. Il implémente l'interface SortedMap
et trie donc automatiquement les clés qu'il contient. Vos clés peuvent simplement être triées par ordre alphabétique pour obtenir le résultat souhaité. Vous n'avez donc même pas besoin de fournir un comparateur.
Les hashmap ne sont jamais triés. La seule chose que vous puissiez faire avec un HashMap est de récupérer toutes les clés, de les stocker dans un ensemble trié ou dans une liste et de trier la liste.
Vous pouvez utiliser TreeMap
qui stockera les valeurs sous forme triée.
Map <String, String> map = new TreeMap <String, String>();
TreeMap va automatiquement trier par ordre croissant. Si vous souhaitez trier par ordre décroissant, utilisez le code suivant:
Copiez le code ci-dessous dans votre classe et en dehors de la méthode execute principale:
static class DescOrder implements Comparator<String> {
@Override
public int compare(String o1, String o2) {
return o2.compareTo(o1);
}
}
Alors dans votre logique:
TreeMap<String, String> map = new TreeMap<String, String>(new DescOrder());
map.put("A", "test1");
map.put("C", "test3");
map.put("E", "test5");
map.put("B", "test2");
map.put("D", "test4");