/**
 * @(#)Test.java
 *
 * Test application
 *
 * @author 
 * @version 1.00 2008/12/16
 */
import java.util.*; 
import java.text.*;
public class Test {
    
   public static void main(String[] args) {     // TODO Auto-generated method stub    
    CollatorComparator comparator = new CollatorComparator();     
     TreeMap map = new TreeMap();           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());     }}}
//编写一个自己的Comparator的子类
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);}}为什么中文排序还是发生错误!在TreeMap中怎么运用自己编写一个Comparator的子类?
敬请高手指教!
另如果用
Map<String,employee> test=new TreeMap<String,employee>;其中employee是一自己编写的一个类
class employee
{
   public employee(String name)
   {
         ........
   }
       ...........
}
如果我想用employee的name来排序的话,给怎么办?

解决方案 »

  1.   

    这一的排序默认是根据字符串的unicode的编码排序的,若想按照汉字的拼音排序,需要把字符串转换编码为iso-8859-1
    看下面我写的例子:public class TestComparator {
        
        @SuppressWarnings("unchecked")
        public static void main(String[] args) {
            List<String> list = new ArrayList<String>();
            list.add("广东");
            list.add("甘肃");
            list.add("贵州");
            list.add("福建");
            list.add("海南");
            
            Comparator cmp = Collator.getInstance(java.util.Locale.CHINA);
            Collections.sort(list, cmp);
            
            Collections.sort(list, new Comparator<String>() {
                public int compare(String o1, String o2)  {
                   return toUTF_8(o1).compareTo(toUTF_8(o2));  
                }
            });
            
            for (String string : list) {
                System.out.println(string);
            }
        }
        
        private static String toUTF_8(String str) {
            try {
                return new String(str.getBytes("GB2312"), "ISO-8859-1");
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
        }
    }
      

  2.   

    iso-8859-1不是西欧字符吗