Maison >Java >javaDidacticiel >Méthode d'implémentation du tri JavaMap par valeur

Méthode d'implémentation du tri JavaMap par valeur

高洛峰
高洛峰original
2017-01-19 09:48:041886parcourir

Map est une interface de collection de paires clé-valeur. Ses classes d'implémentation incluent 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.

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. Le tri peut être réalisé en implémentant la méthode publique compare(T o1, To2) de cette interface.

Remarque : Les codes suivants ont été testés dans Jdk1.6

TreeMap est trié par clé par ordre croissant par défaut

public static void keyUpSort() {
// 默认情况,TreeMap按key升序排序
Map<String, Integer> map = new TreeMap<String, Integer>();
map.put("acb1", 5);
map.put("bac1", 3);
map.put("bca1", 20);
map.put("cab1", 80);
map.put("cba1", 1);
map.put("abc1", 10);
map.put("abc2", 12);
// 默认情况下,TreeMap对key进行升序排序
System.out.println("------------正常情况,TreeMap按key升序排序--------------------");
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}

Modifier le tri de la méthode TreeMap, trier par clé dans l'ordre décroissant

public static void keyDownSort() {
// TreeMap,按key降序排序
// 降序排序比较器
Comparator<String> keyComparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o2.compareTo(o1);
}
};
Map<String, Integer> map = new TreeMap<String, Integer>(keyComparator);
map.put("acb1", 5);
map.put("bac1", 3);
map.put("bca1", 20);
map.put("cab1", 80);
map.put("cba1", 1);
map.put("abc1", 10);
map.put("abc2", 12);
System.out.println("------------TreeMap按key降序排序--------------------");
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}

Trier par valeur

Ce qui suit montre uniquement le tri par valeur dans ordre croissant par TreeMap, qui s'applique également à HashMap.

Modifiez la méthode de tri de TreeMap et triez par ordre croissant de valeur

Remarque : dans des circonstances normales, Map ne peut pas être trié à l'aide de la méthode Collections.sort(), mais vous pouvez convertir la Map dans une liste.

public static void valueUpSort() {
// 默认情况,TreeMap按key升序排序
Map<String, Integer> map = new TreeMap<String, Integer>();
map.put("acb1", 5);
map.put("bac1", 3);
map.put("bca1", 20);
map.put("cab1", 80);
map.put("cba1", 1);
map.put("abc1", 10);
map.put("abc2", 12);
// 升序比较器
Comparator<Map.Entry<String, Integer>> valueComparator = new Comparator<Map.Entry<String,Integer>>() {
@Override
public int compare(Entry<String, Integer> o1,
Entry<String, Integer> o2) {
// TODO Auto-generated method stub
return o1.getValue()-o2.getValue();
}
};
// map转换成list进行排序
List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
// 排序
Collections.sort(list,valueComparator);
// 默认情况下,TreeMap对key进行升序排序
System.out.println("------------map按照value升序排序--------------------");
for (Map.Entry<String, Integer> entry : list) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}

Résultats des tests

------------正常情况,TreeMap按key升序排序--------------------
abc1:10
abc2:12
acb1:5
bac1:3
bca1:20
cab1:80
cba1:1
------------TreeMap按key降序排序--------------------
cba1:1
cab1:80
bca1:20
bac1:3
acb1:5
abc2:12
abc1:10
------------map按照value升序排序--------------------
cba1:1
bac1:3
acb1:5
abc1:10
abc2:12
bca1:20
cab1:80

Ce qui précède est la carte Java présentée par l'éditeur La mise en œuvre méthode de tri par valeur, j'espère que cela sera utile à tout le monde. Si vous avez des questions, laissez-moi un message et l'éditeur vous répondra à temps. Je voudrais également vous remercier tous pour votre soutien au site Web PHP chinois !

Pour plus d'articles liés à la méthode d'implémentation du tri JavaMap 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