天天看点

java map排序 分页,Java HashMap和TreeMap的排序问题总结

Map存储的是key->value的值对,key的值是唯一的,而value的值可以重复。通常使用的是HashMap或TreeMap,如果考虑性能,使用HashMap。TreeMap使用红黑树实现,保留有key值顺序性,会自动按照key值排序。

默认是按照key值的升序排序,key值必须实现 Comparator接口。如果希望按找一定规则排序,则需要重新定义compare函数。

如:

TreeMap hm = new TreeMap(new Comparator() {

public int compare(Object o1, Object o2) {

//如果有空值,直接返回0

if (o1 == null || o2 == null)

return 0;

return String.valueOf(o1).compareTo(String.valueOf(o2));

}

});

对于处理有中文排序的问题

TreeMap hm = new TreeMap(new Comparator() {

public int compare(Object o1, Object o2) {

//如果有空值,直接返回0

if (o1 == null || o2 == null)

return 0;

CollationKey ck1 = collator.getCollationKey(String.valueOf(o1));

CollationKey ck2 = collator.getCollationKey(String.valueOf(o2));

return ck1.compareTo(ck2);

}

});

备注: CollationKey:CollationKey 表示遵守特定 Collator 对象规则的 String。

比较两个CollationKey 将返回它们所表示的 String 的相对顺序。使用 CollationKey 来比较 String 通常比使用 Collator.compare 更快。因此,当必须多次比较 String 时 (例如,对一个 String 列表进行排序),使用 CollationKey 会更高效。

如果想按照value排序或者是对HashMap中的key或value排序则可以如下:

List> list = new ArrayList>(m.entrySet());

Collections.sort(list,new Comparator>(){

public int compare(Map.Entry o1, Map.Entry o2){

return o2.getValue()-o1.getValue();

}

});&