java如何找出一个int数组中出现次数最多

如题所述

其实这个问题,涉及到两个过程

    首先是统计数组中数字出现的次数,应该要有类似“数字 - 出现次数”这种结果出现,其实就是Map结构的key和value

    然后就是找出出现次数最大的一个,并返回对应的数字即可

针对以上两个过程,推荐采用Java8的流(Stream)来处理,代码比较简单易懂,因此下面的示例代码,请在JDK8的环境下运行

int[] arr = {1, 2, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5};
// 过程1 Collectors.groupingBy代表是分类,按照本身Function.identity()进行分类,那相同数字就会放在一起,Collectors.counting是统计相同数字的个数
Map<Integer, Long> map = IntStream.of(arr).boxed().collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
System.out.println("数字出现次数统计(数字=次数):" + map);

// 过程2 max方法是根据比较器(按照map的value进行排序)找出最大值
Optional<Integer> maxOptional = map.entrySet().stream().max(Comparator.comparing(Map.Entry::getValue)).map(Map.Entry::getKey);
System.out.println("出现次数最多的数字:" + maxOptional.get());

最后结果如下

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-02-23
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;




public class Mytest
{
/**
* @param args
*/
public static void main(String[] args) 
{
int[] array = {2,3,1,2,2,5,6,8,2,3,2,4,2};
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < array.length; i++) 
{
if(map.containsKey(array[i]))
{
int temp = map.get(array[i]);
map.put(array[i],temp+1);
}
else
{
map.put(array[i],1);
}
}
Collection<Integer> count = map.values();

int maxCount = Collections.max(count);

int maxnum = 0;
for (Map.Entry<Integer,Integer> entry:map.entrySet())
{
if (maxCount==entry.getValue())
{
maxnum = entry.getKey();
}

}
System.out.println("出现次数最多的数字为"+maxnum);
System.out.println("改次数一共出现了"+maxCount+"次");
}
}

相似回答