本帖最后由 张海涛 于 2013-1-15 17:30 编辑
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},这是为什么呢? |