| 本帖最后由 陈莹 于 2012-9-2 19:48 编辑 
 import java.util.*;
 class Mycom implements Comparator<Character>
 {
 public int compare (Character s1,Character s2)
 {
 int a=s1.compareTo(s2);
 //return a;
 if (a==0)
 return 0;
 else
 return 1;
 }
 }
 public class TreeMapTest
 {
 public static void main(String args[])
 {
 String s = "abca";
 String str = letterCount(s);
 System.out.println(str);
 }
 public static String letterCount(String s)
 {
 int cou = 0;
 char[] ch = s.toCharArray();
 TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>(new Mycom());
 for(int i=0;i<ch.length;i++)
 {
 Integer value = tm.get(ch);
 
 if(value != null)
 cou = value;
 cou++;
 tm.put(ch,cou);
 cou = 0;
 }
 
 //返回此映射中包含的键的 Set 视图。
 Set<Character> keyset = tm.keySet();
 Iterator<Character> it1  = keyset.iterator();
 while(it1.hasNext())
 {
 Character c = it1.next();
 Integer count = tm.get(c);//get()返回指定键所映射的值;
 //如果此映射不包含该键的映射关系,则返回 null。
 System.out.print(c+"("+count+")");
 }
 System.out.println();
 System.out.println("===========================================");
 
 //返回此映射中包含的映射关系的 Set 视图。
 Set<Map.Entry<Character,Integer>> entryset = tm.entrySet();//返回此映射中包含的映射关系的 Set 视图
 
 Iterator<Map.Entry<Character,Integer>> it = entryset.iterator();
 StringBuilder sb = new StringBuilder();
 
 while(it.hasNext())
 {
 Map.Entry<Character,Integer> me = it.next();
 
 char c = me.getKey();
 int x = me.getValue();
 sb.append(c+"("+x+")");
 }
 return sb.toString();
 }
 }
 程序运行的结果为{a=1;b=1,c=1,a=2},不是说put方法向TreeMap中添加映射关系时,如果该映射以前包含此键的映射关系,那么将替换旧值,但是这里为什么出现两个相同的键a呢?
 假如用绿色代码替代红色代码,那么运行结果就是对的,{a=2;b=1,c=1},这是为什么呢?
 
 |