Maison  >  Article  >  Java  >  Implémentation du tri de cartes en Java

Implémentation du tri de cartes en Java

王林
王林avant
2019-11-29 13:34:072571parcourir

Implémentation du tri de cartes en Java

map est une interface de collection de paires clé-valeur. Ses classes d'implémentation incluent principalement : HashMap<span style="font-family:Microsoft Yahei, Hiragino Sans GB, Helvetica, Helvetica Neue, 微软雅黑, Tahoma, Arial, sans-serif">、</span>TreeMap<span style="font-family:Microsoft Yahei, Hiragino Sans GB, Helvetica, Helvetica Neue, 微软雅黑, Tahoma, Arial, sans-serif">、</span>Hashtable et LinkedHashMap, etc. Les différences entre les quatre sont les suivantes (brève introduction) :

HashMap : Notre carte la plus couramment utilisée, qui stocke les données en fonction de la valeur HashCode de la clé, peut être obtenue directement en fonction de la valeur. clé En même temps, il a une vitesse d’accès rapide. HashMap permet uniquement à la valeur clé d'un enregistrement d'être nulle (plusieurs enregistrements seront écrasés) ; il permet à la valeur de plusieurs enregistrements d'être nulle. Asynchrone.

TreeMap : Il peut trier les enregistrements qu'il enregistre selon la clé. La valeur par défaut est l'ordre croissant. Vous pouvez également spécifier le comparateur de tri Lorsque vous utilisez Iterator pour parcourir le TreeMap, les enregistrements obtenus sont triés. TreeMap ne permet pas que la valeur de la clé soit nulle. Asynchrone.

Hashtable : Semblable à HashMap, la différence est que ni la clé ni la valeur ne peuvent être nulles ; il prend en charge la synchronisation des threads, c'est-à-dire qu'un seul thread peut écrire dans la table de hachage à tout moment, ce qui également mène à Hashtale sera plus lent lors de l’écriture.

LinkedHashMap : Enregistre l'ordre d'insertion des enregistrements Lorsque vous utilisez Iterator pour parcourir LinkedHashMap, l'enregistrement obtenu en premier doit être inséré en premier. Il sera plus lent que HashMap lors du parcours. La clé et la valeur peuvent être vides et asynchrones.

Partage de cours d'apprentissage en ligne : cours Java

Tri de cartes

TreeMap

TreeMap est par ordre croissant par défaut. Si nous devons changer la méthode de tri, nous devons utiliser un comparateur : Comparator.

Comparator est une interface de comparaison qui peut trier des objets de collection ou des tableaux. L'implémentation de la méthode publique compare(T o1, To2) de cette interface peut réaliser le tri. Cette méthode est principalement basée sur le premier paramètre. o1, inférieur, égal ou supérieur à o2 renvoie respectivement un entier négatif, 0 ou un entier positif. Comme suit :

public class TreeMapTest {
    public static void main(String[] args) {
        Map<String, String> map = new TreeMap<String, String>(
                new Comparator<String>() {
                    public int compare(String obj1, String obj2) {
                        // 降序排序
                        return obj2.compareTo(obj1);
                    }
                });
        map.put("c", "ccccc");
        map.put("a", "aaaaa");
        map.put("b", "bbbbb");
        map.put("d", "ddddd");
 
        Set<String> keySet = map.keySet();
        Iterator<String> iter = keySet.iterator();
        while (iter.hasNext()) {
            String key = iter.next();
            System.out.println(key + ":" + map.get(key));
        }
    }
}

Les résultats d'exécution sont les suivants :

Implémentation du tri de cartes en Java

L'exemple ci-dessus consiste à trier en fonction de la valeur clé de TreeMap, mais parfois nous avons besoin trier en fonction de la valeur de TreeMap à trier. Pour trier les valeurs, nous devons utiliser la méthode sort(List list, Comparator super T> c) de Collections, qui trie la liste spécifiée en fonction de l'ordre généré par le comparateur spécifié.

Mais il y a un prérequis, c'est-à-dire que tous les éléments doivent pouvoir être comparés selon le comparateur fourni. Comme suit :

public class TreeMapTest {
    public static void main(String[] args) {
        Map<String, String> map = new TreeMap<String, String>();
        map.put("d", "ddddd");
        map.put("b", "bbbbb");
        map.put("a", "aaaaa");
        map.put("c", "ccccc");
 
        //这里将map.entrySet()转换成list
        List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());
        //然后通过比较器来实现排序
        Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
            //升序排序
            public int compare(Entry<String, String> o1,
                    Entry<String, String> o2) {
                return o1.getValue().compareTo(o2.getValue());
            }
 
        });
 
        for(Map.Entry<String,String> mapping:list){ 
               System.out.println(mapping.getKey()+":"+mapping.getValue()); 
          } 
    }
}

Exécuter les résultats

Implémentation du tri de cartes en Java

HashMap

Nous sommes tous des valeurs HashMap, il n'y a pas d'ordre , Il est implémenté selon le HashCode de la clé. Comment implémenter le tri pour cette HashMap non ordonnée ? En référence au tri des valeurs de TreeMap, nous pouvons également implémenter le tri de HashMap.

public class HashMapTest {
    public static void main(String[] args) {
        Map<String, String> map = new HashMap<String, String>();
        map.put("c", "ccccc");
        map.put("a", "aaaaa");
        map.put("b", "bbbbb");
        map.put("d", "ddddd");
 
        List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet());
        Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
            //升序排序
            public int compare(Entry<String, String> o1,
                    Entry<String, String> o2) {
                return o1.getValue().compareTo(o2.getValue());
            }
 
        });
 
        for(Map.Entry<String,String> mapping:list){ 
               System.out.println(mapping.getKey()+":"+mapping.getValue()); 
          } 
     }
}

Résultats d'exécution :

Implémentation du tri de cartes en Java

D'autres articles et didacticiels connexes sont recommandés : Démarrer avec Java

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer