日期:2014-05-20  浏览次数:20661 次

请问如何计算数组中不同元素个数?
一个数组
比如{苹果,茄子,白菜,鸭梨,茄子,橙子,鸭梨,白菜,鸭梨,茄子,白菜,苹果}
就是挑出 

白菜 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] + "次");
        }

    }