本帖最后由 陈莹 于 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},这是为什么呢?
|