本帖最后由 了无尘 于 2012-3-25 09:50 编辑
呵呵,标题就调侃下,没别的意思
说正题有位同仁Destiny发了一个map统计排序的帖子,我视频着实没看到那里,所以也不知道怎么去回复,想了想map操作貌似不是很快,所以我用了稍微快速点的办法,呵呵
题目是这样的,对字符串“sdfgzxcvasdfxcvdf”每个字符出现次数并对其排序
这个是对于只有小写字母的,采用的字符的ascii表值的相对映射关系,排序先放后边,一会说,先看统计- public static void main(String[] args)
- {
- //统计字符串中英文字符的出现次数
- String string = "sdfgzxcvasdfxcvdf";
- char[] c = string.toCharArray();
- //用来保存26个英文字母出现的次数
- //该数组0为a 25为z
- //使用时以字符的ascii码值减去97
- //因为a字符的ascii值为97
- //这里的ascii编码表其实就是张map
- int[] temp = new int[26];
- for(char ch : c)
- {
- temp[ch-97] ++;
- }
-
- for(char d = 'a'; d < 'z' + 1; d++)
- {
- System.out.println("" + d + "出现了" + temp[d-97] + "次");
- }
- }
复制代码 话说万一要是有大些字母或者符号肿么办?骚年别着急,咱这么办
- //统计字符串中英文字符的出现次数
- //并对次数排序
- public class Demo
- {
- public static void main(String[] args)
- {
-
- String string = "sdfgzxcvasdfxcvdf";
- char[] c = string.toCharArray();
- // 用来存放ascii字符的次数
- int[] ascii = new int[255];
- for(char ch : c)
- {
- ascii[ch]++;
- }
-
- for(char d = 'a'; d < 'z' + 1; d++)
- {
- System.out.println("" + d + "出现了" + ascii[d] + "次");
- }
- }
- }
复制代码 额,要是整张的ascii表都不够用,你非得中文啥的,也行,我靠,我就定义成字符类型最大长度,这回怕了吧,哼哼,不过那个先不考虑他,没必要,方法都是一样的。
下边这个是完整的,我希望的话呢,做东西不要照抄老师的,要灵学活用,我们自己通过其他方式也实现下,也能开阔思维,很多看起来很爽的api也是基础知识堆出来的不是么,呵呵,具体的设计思路,注释里都有,希望能给大家打开一扇新的窗户。最后说点啥呢,呵呵,就是毕老师的map简直弱爆了,在调侃下,木哈哈,最重要的是,写东西要根据需求来写最简单的代码,这也是为什么我分了3段来演示,如果只有小写字母的第一个是最方便的- 其实没做效率测试,很多能省略的代码为了演示也没删除,包括最耗时的syso方法。
- .出现了4次
- /出现了2次
- a出现了1次
- c出现了2次
- d出现了3次
- f出现了3次
- g出现了1次
- s出现了2次
- v出现了2次
- x出现了2次
- z出现了1次
- ===========================>
- .出现了4次 循环执行到第0次
- /出现了2次 循环执行到第1次
- a出现了1次 循环执行到第2次
- c出现了2次 循环执行到第3次
- d出现了3次 循环执行到第4次
- f出现了3次 循环执行到第5次
- g出现了1次 循环执行到第6次
- s出现了2次 循环执行到第7次
- v出现了2次 循环执行到第8次
- x出现了2次 循环执行到第9次
- z出现了1次 循环执行到第10次
- ===========================>
- a出现了1次
- g出现了1次
- z出现了1次
- /出现了2次
- c出现了2次
- s出现了2次
- v出现了2次
- x出现了2次
- d出现了3次
- f出现了3次
- .出现了4次
- ===========================>
- 耗时0毫秒
复制代码 |