Java Map 按照Value排序的实现方法
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排序的实现方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
上一篇: Mybatis全面分页插件
下一篇: 一道关于java异常处理的题目