欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-13 13:32:15
map是键值对的集合接口,它的实现类主要包括:hashmap,treemap,hashtable以及linkedhashmap等。 •treemap:基于红黑...

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排序的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!