【问题标题】:Check if Java array contains n amount of a specific integer检查Java数组是否包含n个特定整数
【发布时间】:2014-11-03 14:33:38
【问题描述】:

有没有一种方法可以检查数组是否包含 n 个特定整数。

假设我们有数组:

int[] arr = {1, 2 , 3 , 4, 5, 5, 4, 3, 2, 1}

我们可以检查 arr 是否包含 2 个 5。或者如果 arr 包含 3 个 2。

【问题讨论】:

  • 是的,我们可以(嗯,听起来很熟悉)!到目前为止,你知道了什么?
  • 没有开箱即用的方法,你必须自己做(或使用番石榴Multiset)
  • 酷,只是想知道我是否必须自己制作一个
  • 反正就是三班左右。

标签: java arrays


【解决方案1】:

澄清RC's 评论。您可以使用 Guava 的 ImmutableMultiset 和 Multiset,如下所示:

Multiset<Integer> set = ImmutableMultiset.copyOf(myarray);
int countOf5s = set.count(5);

这不是显而易见的简单答案,但我喜欢番石榴,所以我想我会加入。

ImmutableMultset.copyOf()

Multiset.count()

【讨论】:

  • 这不适用于原始数组,如果 OP 有一个引用类型的数组,那么 Collections.frequency(Arrays.asList(myarray), 5) 会为他做这件事,而且性能更高。
  • 我忘了frequency。谢谢。但是,恕我直言的性能可能会被争论,因为这可能只是在进行单次查找时性能更高。如果进行不止一次计数检查,我认为这组可能总体上更快。 WRT int[],Guava 的 Ints.asList 在那里工作得很好。
  • 对于小型原始数组,您需要进行大量查找才能击败专门针对该案例的三行方法。特别是考虑到整个数组将在 L1 缓存中,如果需要检查数组是否具有至少所请求的值数量,则更是如此。
【解决方案2】:

如果您只是想计算 one 元素的出现次数,则没有理由构建 Multiset 来计算所有元素,尽管 Guava 仍会帮助您...

int countOf5s = Collections.frequency(Ints.asList(intArray), 5);

【讨论】:

    猜你喜欢
    • 2016-02-04
    • 1970-01-01
    • 2017-05-03
    • 2019-10-03
    • 2020-09-08
    • 2012-11-27
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多