Java HashMap和TreeMap的排序问题总结
2009-11-17 14:54
716 查看
Map存储的是key->value的值对,key的值是唯一的,而value的值可以重复。通常使用的是HashMap或TreeMap,如果考虑性能,使用HashMap。TreeMap使用红黑树实现,保留有key值顺序性,会自动按照key值排序。
默认是按照key值的升序排序,key值必须实现 Comparator接口。如果希望按找一定规则排序,则需要重新定义compare函数。
如:
对于处理有中文排序的问题
备注: CollationKey:CollationKey 表示遵守特定 Collator 对象规则的 String。
比较两个CollationKey 将返回它们所表示的 String 的相对顺序。使用 CollationKey 来比较 String 通常比使用 Collator.compare 更快。因此,当必须多次比较 String 时 (例如,对一个 String 列表进行排序),使用 CollationKey 会更高效。
如果想按照value排序或者是对HashMap中的key或value排序则可以如下:
获取Map.Entry成为表,然后定义comparator进行自定义的排序。
默认是按照key值的升序排序,key值必须实现 Comparator接口。如果希望按找一定规则排序,则需要重新定义compare函数。
如:
TreeMap hm = new TreeMap<String, String>(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<String, String>(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<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(m.entrySet()); Collections.sort(list,new Comparator<Map.Entry<String,Integer>>(){ public int compare(Map.Entry<String,Integer> o1, Map.Entry<String,Integer> o2){ return o2.getValue()-o1.getValue(); } });
获取Map.Entry成为表,然后定义comparator进行自定义的排序。
相关文章推荐
- Java原生排序方法总结--HashMap排序
- java集合Map,HashMap,TreeMap知识点总结
- Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
- Java集合--Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
- Java中对Map(HashMap,TreeMap,Hashtable,LinkedHashMap等)的排序
- Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
- TreeMap,HashMap的排序问题
- Java中对Map(HashMap,TreeMap,Hashtable等)的排序
- Java中对Map(HashMap,TreeMap,Hashtable等)的排序
- java中的几种泛型类——HashSet、HashMap、TreeSet、TreeMap,遍历map,排序,HashTable比较
- Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
- Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
- Java集合之Hashtable<K,V>,TreeMap<K,V>,HashMap<K,V>自动排序
- 黑马程序员:Java基础总结----数组排序问题
- Java【集合系列】-14- Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
- java中TreeMap自定义排序以及一个键对应多个值问题
- Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
- Java 集合系列14之 Map总结(HashMap, Hashtable, TreeMap, WeakHashMap等使用场景)
- Java中对Map(HashMap,TreeMap,Hashtable等)的排序
- 关于map的数据排序问题(hashmap,treemap)