`

Java treemap 排序

    博客分类:
  • Java
阅读更多

TreeMap 和 HashMap 用法大致相同,但实际需求中,我们需要把一些数据进行排序;
以前在项目中,从数据库查询出来的数据放在List中,顺序都还是对的,但放在HashMap中,顺序就完全乱了。

为了处理排序的问题:
    1. 对于一些简单的排序,如:数字,英文字母等
        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));
               }
      });
      备注:
        compareTo(String str) :是String 提供的一个方法,如果参数字符串等于此字符串,
                  则返回 0 值;如果按字典顺序此字符串小于字符串参数,则返回一个小于 0 的值;
                  如果按字典顺序此字符串大于字符串参数,则返回一个大于 0 的值。

        int compare(T o1,T o2):随第一个参数小于、等于或大于第二个参数而分别返回负整数、
                                    零或正整数。
   

  2.对于处理有中文排序的问题
     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 会更高效。

 

实例:

package ChineseSort;
import java.util.Collection;
import java.util.Iterator;
import java.util.SortedMap;
import java.util.TreeMap;

public class TestSort {
public static void main(String[] args) {
    // TODO Auto-generated method stub    
    CollatorComparator comparator = new CollatorComparator();
    TreeMap map = new TreeMap(comparator);
      
    for(int i=0; i<10; i++) {
        String s = ""+(int)(Math.random()*1000);
        map.put(s,s);
    }
    map.put("abcd","abcd");
    map.put("Abc", "Abc");
    map.put("bbb","bbb");
    map.put("BBBB", "BBBB");
    map.put("北京","北京");
    map.put("中国","中国");
    map.put("上海", "上海");
    map.put("厦门", "厦门");
    map.put("香港", "香港");
    map.put("碑海", "碑海");
    Collection col = map.values();
    Iterator it = col.iterator();
    while(it.hasNext()) {
        System.out.println(it.next());}}}

比较器类:
package ChineseSort;
import java.text.CollationKey;
import java.text.Collator;
import java.util.Comparator;

public class CollatorComparator implements Comparator {
Collator collator = Collator.getInstance();
public int compare(Object element1, Object element2) {
    CollationKey key1 = collator.getCollationKey(element1.toString());
    CollationKey key2 = collator.getCollationKey(element2.toString());
    return key1.compareTo(key2);
}
}
运行该类,运行结果如下:
325
62
653
72
730
757
874
895
909
921
Abc
abcd
bbb
BBBB
碑海
北京
上海
厦门
香港
中国
      此时可以看到中文的排序已经完成正常。如果想不让英文区分大小写,则修改CollatorComparator类,找到
    element1.toString()
    修改为:
    element1.toString().toLowerCase()
    当然你改成转换成大写的也无所谓了,当然element2.toString()也要同时修改为element2.toString().toLowerCase()。

分享到:
评论
1 楼 greatwqs 2012-02-04  
奇怪   难道是我英文操作系统的原因?
12
428
469
533
566
663
798
931
983
995
Abc
abcd
bbb
BBBB
上海
中国
北京
厦门
碑海
香港

相关推荐

    Java TreeMap排序算法实例

    Java TreeMap排序算法实例 Java TreeMap排序算法是Java中的一种常用的排序算法,主要用于对Map中的键值对进行排序。TreeMap排序算法的实现原理是基于红黑树数据结构的,通过将键值对插入到红黑树中,并对树中的节点...

    java 中 TreeMap排序

    在Java编程语言中,`TreeMap`是一种基于红黑树数据结构实现的键值对容器,与`HashMap`不同,`TreeMap`自动按照键的自然顺序或者自定义的比较器进行排序。当我们需要存储的数据有特定的排序需求时,`TreeMap`便成为一...

    List和Treemap排序实例及效率对比

    本资源提供了List对对象中的属性和TreeMap, String&gt;对键值排序,并针对100w条数据排序,对比List和TreeMap, String&gt;排序的效率。个人认为排序效率对比可以相信,但也可能存在不科学之处,还请高手给与指点,多多包涵...

    java treemap 学生信息

    在Java编程语言中,`TreeMap` 是一个有序的键值对集合,它实现了 `SortedMap` 接口。这个数据结构内部基于红黑树(Red-Black Tree)算法实现,保证了插入、删除和查找操作的时间复杂度为 O(log n)。在“java treemap...

    java中TreeMap排序的示例代码

    Java 中 TreeMap 排序的示例代码 Java 中的 TreeMap 排序是 Java 语言中一种常用的数据结构排序方法。TreeMap 是一个有序的 Map 集合,它可以根据键的自然顺序或自定义的比较器进行排序。 TreeMap 排序的优点 1. ...

    java用treemap统计单词出现的个数

    Java TreeMap是一个有序的Map实现,它可以根据对象的自然顺序或自定义的比较器对键进行排序。在本例中,我们使用TreeMap来统计一个句子或一个段落中单词出现的次数,并按照字母表顺序输出。 知识点1:Java TreeMap...

    Java里多个Map的性能比较(TreeMap、HashMap、ConcurrentSkipListMap)

    在Java编程中,Map接口是用于存储键值对的数据结构,而Java提供了多种Map的实现,包括TreeMap、HashMap和ConcurrentSkipListMap。本文主要比较了这三种Map的性能,尤其是在插入和查找操作上的效率。 1. **TreeMap**...

    TreeMap源码

    TreeMap是Java集合框架中的一种有序映射数据结构,它实现了SortedMap接口,提供了按自然顺序或自定义比较器顺序存储键值对的能力。在深入理解TreeMap的源码之前,我们首先要了解其背后的基石——红黑树。 红黑树...

    TreeMap in Java_java_treemap_

    综上所述,`TreeMap`是Java中一个重要的有序映射数据结构,适用于需要排序和导航功能的场景。了解其特性和常用方法,有助于在实际编程中更高效地利用这个容器。阅读"TreeMap in Java.pdf"文档将进一步深入理解其内部...

    java汉字笔画排序2源代码jar包

    在Java中,这可能涉及到对HashMap或TreeMap等数据结构的使用,以便快速地根据笔画信息查找和比较汉字。同时,为了减少内存占用,可能采用了更紧凑的数据表示方式,比如使用位运算存储笔画信息,或者优化了数据结构的...

    浅谈java中的TreeMap 排序与TreeSet 排序

    在Java编程语言中,`TreeMap` 和 `TreeSet` 是两种基于红黑树数据结构实现的集合类,它们都提供了自动排序的功能。本文将详细探讨 `TreeMap` 和 `TreeSet` 的排序机制以及如何自定义排序规则。 首先,`TreeMap` 是...

    JAVA使用TreeMap对字符串进行排序

    JAVA使用TreeMap对字符串进行排序 JAVA中TreeMap是一种基于红黑树的实现,能够自动对key进行排序。下面将详细介绍如何使用TreeMap对字符串进行排序。 首先,需要了解TreeMap的特点。TreeMap是一种基于红黑树的实现...

    Java集合排序及java集合类详解.pdf

    ### Java集合排序及Java集合类详解 #### 一、集合框架概述 集合框架是Java编程语言的核心组件之一,用于组织和操作数据集。Java集合框架提供了多种数据结构,包括列表(List)、集(Set)和映射(Map),这些数据结构...

    Java集合排序及java集合类详解

    在本篇中,我们将深入探讨Java集合的排序机制以及集合类的详细使用。 首先,我们来了解一下Java集合的基本分类。Java集合主要分为两大类:List(列表)和Set(集)。List是一个有序的集合,允许元素重复,并且可以...

    java实现的map排序

    Java中实现Map排序的方式主要有两种,一种是使用TreeMap,另一种是使用SortedMap接口。HashMap内部元素是无序的,它不会记录插入顺序,也不保证顺序。如果需要有序的Map,可以使用TreeMap,它会根据键的自然顺序进行...

    java中treemap和treeset实现红黑树

    Java 中 TreeMap 和 TreeSet 实现红黑树 Java 中的 TreeMap 和 TreeSet 都是基于红黑树的数据结构实现的。红黑树是一种自平衡的排序二叉树,它可以保证在插入、删除和搜索操作时都能维持平衡,从而确保搜索、插入...

    Java集合排序及java集合类详解(Collection、List、Map、Set)

    ### Java集合排序及java集合类详解 #### 集合框架概述 集合是Java编程语言中非常核心且广泛使用的部分,对于深入理解和高效使用Java语言至关重要。本文将围绕Java集合框架进行详细介绍,包括Collection、List、Set...

    Java Map按键排序和按值排序

    Java Map的按键排序和按值排序可以使用TreeMap,V&gt;和LinkedHashMap, String&gt;类来实现。按键排序可以使用TreeMap,V&gt;的比较器来定义比较规则,而按值排序可以使用LinkedHashMap, String&gt;的链表结构来保存键值对。

    java中HashMap,LinkedHashMap,TreeMap,HashTable的区别

    ### Java中HashMap, LinkedHashMap, TreeMap,HashTable的区别 在Java编程语言中,`Map`接口是集合框架中的一个重要组成部分,用于存储键值对。本文将详细分析四种常用的`Map`实现类:`HashMap`, `LinkedHashMap`, ...

Global site tag (gtag.js) - Google Analytics