1

我试图弄清楚如何获取列表中项目的频率。过去,当我处理这个问题时,我通常会:

int occurrences = Collections.frequency(list, 0);

当我的列表是List<Integer> list. 如果我正在使用,有没有办法做到这一点int[] list?当我尝试收集时,我的列表会被转换,然后我的代码会中断。如果需要,我可以转换我的代码,但想知道是否有办法从 int[] 获取频率。

4

4 回答 4

2

您可以 (1) 编写自己的线性时间frequency方法,或 (2) 转换为盒装 int 类型的数组并使用Arrays.asListwith Collections.frequency

int[] arr = {1, 2, 3};
Integer[] boxedArr = new Integer[arr.length];
for(int i = 0; i < arr.length; i++)
    boxedArr[i] = arr[i];
System.out.println(Collections.frequency(Arrays.asList(boxedArr), 1));
于 2012-04-12T04:39:59.703 回答
2

List您可以从 中创建一个int[],但除此之外,您只需要编写自己的。

int[] l = //your data;
List<Integer> list = new List<Integer>();
for(int i : l)
  list.add(i);

int o = Collections.frequency(list, 0);

或者Arrays.asList(l);让它更短。

于 2012-04-12T04:41:10.683 回答
2
int occurrences = Collections.frequency(Arrays.asList(list), 0);

或者,如果您反对将其转换为列表:

int occurrences = 0;
for (int i = 0; i < list.length; i++)
{
    if(list[i] == X) // X being your number to check
        occurrences++;
}
于 2012-04-12T04:54:07.023 回答
1

你也可以这样做。

List<Integer> intList = Arrays.asList(new Integer [] {
      2, 3, 4, 5, 6,
      2, 3, 4, 5,
      2, 3, 4,
      2, 3,
      2
    });

  System.out.println(" count " + Collections.frequency(intList, 6));
于 2012-04-12T05:07:38.310 回答