Maison  >  Article  >  Java  >  Méthodes d'implémentation du tri Java Map par clé et du tri par valeur

Méthodes d'implémentation du tri Java Map par clé et du tri par valeur

高洛峰
高洛峰original
2017-01-19 09:42:181640parcourir

1. Préparation théorique

Map est une interface de collection de paires clé-valeur. Ses classes d'implémentation comprennent principalement : HashMap, TreeMap, Hashtable et LinkedHashMap, etc.

TreeMap : Une implémentation NavigableMap basée sur un arbre Rouge-Noir, qui est trié selon l'ordre naturel de ses clés, ou selon le Comparator fourni lors de la création de la carte, selon la méthode de construction utilisée.

La valeur de HashMap n'est pas dans l'ordre. Elle est implémentée selon le HashCode de la clé. Comment implémenter le tri pour ce HashMap non ordonné ? Reportez-vous au tri des valeurs de TreeMap.

Map.Entry renvoie la vue Collections.

2. Tri par clé

TreeMap est par défaut par ordre croissant 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, comme suit :

import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
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("b", "ccccc");
    map.put("d", "aaaaa");
    map.put("c", "bbbbb");
    map.put("a", "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 :

d:aaaaa
c:bbbbb
b:ccccc
a:ddddd

3. Tri des valeurs

L'exemple ci-dessus consiste à trier en fonction de la valeur clé de TreeMap, mais parfois nous devons trier en fonction de la valeur de TreeMap. Pour trier les valeurs, nous devons utiliser la méthode sort(List8742468051c85b06f0a0af9e3e506b5c list, Comparator117c5a0bdb71ea9a9d0c2b99b03abe3e 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 être comparés selon le comparateur fourni, comme suit :

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
public class TreeMapTest {
  public static void main(String[] args) {
    Map<String, String> map = new TreeMap<String, String>();
    map.put("a", "ddddd");
    map.put("c", "bbbbb");
    map.put("d", "aaaaa");
    map.put("b", "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()); 
     } 
  }
}

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

d:aaaaa
c:bbbbb
b:ccccc
a:ddddd

Les méthodes d'implémentation de Java Map ci-dessus de tri par clé et de tri par valeur sont tout le contenu partagé par l'éditeur. J'espère que cela pourra vous donner une référence, et j'espère que vous soutiendrez le site Web PHP chinois.

Pour plus de méthodes d'implémentation de Java Map de tri par clé et de tri par valeur, veuillez faire attention au site Web PHP chinois !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn