2014-11-03 125 views
-4

是否有可用于检查数组是否包含n个特定整数的方法?检查Java数组是否包含n个特定整数

所以说我们有数组:

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

我们可以检查,如果ARR包含2个5的。或者如果arr包含3 2的。

+0

是的,我们可以(呃,听起来像熟悉的东西)!你到目前为止做了什么? – Dici 2014-11-03 14:34:46

+1

没有开箱即用的方法,你必须自己做(或使用番石榴Multiset) – 2014-11-03 14:35:32

+0

酷,只是想知道如果我不得不自己做一个 – 2014-11-03 14:35:57

回答

0

澄清RC's评论。你可以使用番石榴的ImmutableMultiset和多集如下:

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

这是不是这里的明显简单的答案,但我喜欢这样番石榴想我会放在插头。

ImmutableMultset.copyOf()

Multiset.count()

+1

这对于原始数组不适用,如果OP有一个引用类型的数组,那么'Collections.frequency(Arrays.asList(myarray),5)'会为他做,并且更加高效。 – 2014-11-03 14:46:03

+0

我忘了'频率'。谢谢。但是,恕我直言的表现可能会有争议,因为如果只进行一次查询,这可能只会更高效。如果进行多次计数检查,我认为整套计划可能会更快。 WRT'int []',番石榴的'Ints.asList'在那里工作得很好。 – 2014-11-03 14:54:23

+0

对于较小的原始数组,您需要一个完整的lotta查找来打败专用于该案例的三线程方法。特别是考虑到整个数组将在L1缓存中,并且如果要求检查数组是否至少有*所请求的数值,则更是如此。 – 2014-11-03 14:59:28

0

如果你只是想算一个元素出现,没有理由建立一个Multiset计算所有的元素,但仍然番石榴将帮助你..

int countOf5s = Collections.frequency(Ints.asList(intArray), 5); 
相关问题