我想找到java数组中所有元素的频率?

时间:2017-01-27 13:27:42

标签: java arrays

我是java的新手,我想知道如何找到java数组中每个元素的频率? 这是我的代码:

public static void main(String[] args) {
    int vl=0;
    int a[]={1,2,3,4};

    for(int i=0;i<a.length;i++){
        for(int j=i+1;j<a.length;j++){
        if(a[i]==a[j]){
            vl++; 
            System.out.println(vl);


        }else System.out.println(vl);
        }
    }

}

3 个答案:

答案 0 :(得分:3)

执行此操作的一种可能方法是使用HashMap,其中地图键是您的元素,值是元素频率:

int a[] = {1,2,3,4,2,3};
HashMap<Integer, Integer> frequency = new HashMap<>();
for(int i = 0; i < a.length; i++){
    if (frequency.containsKey(a[i])) {
        frequency.put(a[i], frequency.get(a[i]) + 1 );
    } else {
        frequency.put(a[i], 1);
    }
}
System.out.println(frequency); 

或更多Java-8方法:

Map<Integer,Long> f = Arrays.stream(a).boxed().
      collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println(f);

答案 1 :(得分:0)

我建议你使用基于哈希映射的实现,其中哈希映射中的键是数组元素,值是元素的频率。

迭代整个数组后,您可以获取哈希映射的密钥集并打印所有元素的频率。这种方法在时间复杂度方面更有效。

答案 2 :(得分:-1)

import java.util.Scanner;
public class Count_Occurrence
{
    public static void main(String[] args) 
    {
        int n, x, count = 0, i = 0;
        Scanner s = new Scanner(System.in);
        System.out.print("Enter no. of elements you want in array:");
        n = s.nextInt();
        int a[] = new int[n];
        System.out.println("Enter all the elements:");
        for(i = 0; i < n; i++)
        {
            a[i] = s.nextInt();
        }
        System.out.print("Enter the element of which you want to count number of occurrences:");
        x = s.nextInt();
        for(i = 0; i < n; i++)
        {
            if(a[i] == x)
            {
                count++;
            }
        }
        System.out.println("Number of Occurrence of the Element:"+count);
    }
}

该程序一次可以给出数组中一个元素的频率。

如果你能做到一个。 您可以迭代所有实例。