一个数组
比如{苹果,茄子,白菜,鸭梨,茄子,橙子,鸭梨,白菜,鸭梨,茄子,白菜,苹果}
就是挑出
白菜 3 个
鸭梨 3 个
茄子 2 个
苹果 2 个
鸭梨 1 个
现在要统计,其中有哪些不同元素,不同元素的个数各是多少
这里想请教,如何做效率更高?
是不是每次都要遍历一遍数组?
个人觉得,hashmap应该不好,因为所谓的id不适合作为逐渐增长的个数统计。
这种非连续性的数组元素类型,如果先做一次排序,然后逐个遍历一次,得到结果估计会快,但是之前的排序会不会代价更高?
请各位指点,谢谢了
------解决方案--------------------------------------------------------
这个我不想说了,你看到这个问题就应该想到出现频率。如果不用hashmap,你可以求每个数组元素的hashcode,然后用hashcode值作为数组下标,不过这样会显得数组特别大,所以建议你用hashmap。如果你的这个数组不是汉字的话,而是0-9的数字,那么这个问题就很简单了,代码如下:
- Java code
public class TestCount{ /** * @param args */ public static void main(String[] args) { String str = "12455547464515475354635"; int[] x = new int[10]; char[] ca = str.toCharArray(); for (int i = 0; i < ca.length; i++) { x[ca[i] - '0']++; } for (int i = 0; i < x.length; i++) { System.out.println("字符" + (char) ('0' + i) + "出现了" + x[i] + "次"); } }