当前位置: 移动技术网 > IT编程>开发语言>Java > Java Map 按照Value排序的实现方法

Java Map 按照Value排序的实现方法

2019年07月22日  | 移动技术网IT编程  | 我要评论

map是键值对的集合接口,它的实现类主要包括:hashmap,treemap,hashtable以及linkedhashmap等。

•treemap:基于红黑树(red-black tree)的 navigablemap 实现,该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 comparator 进行排序,具体取决于使用的构造方法。

•hashmap的值是没有顺序的,它是按照key的hashcode来实现的,对于这个无序的hashmap我们要怎么来实现排序呢?参照treemap的value排序。

map.entry返回collections视图。

按key排序

treemap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:comparator。comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(t o1,to2)方法即可实现排序。

注意:以下代码均已在jdk1.6测试通过了

treemap默认按key升序排序

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());
}
}

修改treemap的排序方式,按key降序排序

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());
}
}

按value排序

以下只演示按treemap按value升序排序,这同样适用于hashmap。

修改treemap的排序方式,按value升序排序

注意:正常情况下map是不可以使用collections.sort()方法进行排序的,不过可以将map转换成list之后再进行排序

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());
}
}

测试结果

------------正常情况,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

以上所述是小编给大家介绍的java map 按照value排序的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对移动技术网网站的支持!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网