鄙人从网上查询如题问题,发现有两种不同的方法,考虑到效率问题,作如下比较:
1、第一种方法是:直接使用for循环遍历并查找相同的字符,然后次数递增;
2、第二种方法是:用Map存储字符及其出现次数,利用Map种键不能重复这一特点实现;
public class GetCharCount {
public static void main(String[] args) {
String string = "abcde%^kka27qoq";
System.out.println(string);
long start = System.nanoTime();
fun1(string);
long end = System.nanoTime();
System.out.println("\ncost time:" + (end - start));
start = System.nanoTime();
fun2(string);
end = System.nanoTime();
System.out.println("\ncost time:" + (end - start));
}
public static void fun1(String str) {
char[] cs = str.toCharArray();
for (int i = 0; i < cs.length; i++) {
if (cs[i] == ' ') {
continue;
}
int count = 1;
for (int j = i + 1; j < cs.length; j++) {
if (cs[i] == cs[j]) {
count++;
cs[j] = ' ';
}
}
System.out.print(cs[i] + "(" + count + ")");
}
}
public static void fun2(String str) {
Map<Character, Integer> map = new HashMap<Character, Integer>();
char[] cs = str.toCharArray();
for (int i = 0; i < cs.length; i++) {
Integer count = map.get(cs[i]);
if (count == null) {
count = 0;
}
map.put(cs[i], count + 1);
}
Set<Entry<Character, Integer>> entrySet = map.entrySet();
for (Entry<Character, Integer> entry : entrySet) {
System.out.print(entry.getKey() + "(" + entry.getValue() + ")");
}
}
}
测试截图如下:
从上可以发现:用for循环遍历比用Map集合快至少10倍以上;