利用HashMap找出数组中出现次数最多的元素及其次数

我在牛客网上刷题时遇到了这道题目,因为初学Java不久,对Java的应用还不熟悉,刚开始用C语言做没做出来(我太菜了。。。),接着百度发现竟然可以用HashMap做,仔细一想发现这真是一个好办法(为什么我就想不到!!!),下面是我参考大佬们的代码自己写出来的,附加了个人理解。

import java.util.*;
/**
 * 从键盘输入一个数组
 * 找出数组中出现次数最多的元素
 * @author Administrator
 *
 */
public class max_number_Array{
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int num = in.nextInt();
		int[] data = new int[num];
		
		for(int i=0; i<num; i++) {
			data[i] = in.nextInt();
		}
		Map<Integer,Integer> numMap = new HashMap<Integer,Integer>();
		//在Map中存入数组元素;包括某个元素出现的次数
		for(int i=0; i<num; i++) {
			if(numMap.containsKey(data[i])) {//如果Map中已经有该元素,则其value值加1
				int temp = numMap.get(data[i]);
				numMap.put(data[i],temp+1);
			}else {							 //如果Map中没有该元素,则添入该元素(这其实就是初始化)
				numMap.put(data[i], 1);
			}
		}
		//找出出现次数最多的元素。
		Collection<Integer> KeyArray = numMap.values();//存储所有元素出现的次数;
		int maxCount = Collections.max(KeyArray);//找出最大的次数,下一步:元素和次数进行匹配;
		
		for(Map.Entry<Integer, Integer> map:numMap.entrySet()) {//通过Entry利用增强for循环遍历上述Map的键值对对象
			if(maxCount == map.getValue()) {//获取value值一一匹配
				System.out.print("此数组中出现次数最多的元素是:");
				System.out.println(map.getKey());//如果匹配成功,输出该value值对应的Key值
			}
		}
		System.out.println("该元素出现的次数是:"+maxCount);	
	}
}

发布了3 篇原创文章 · 获赞 0 · 访问量 24

猜你喜欢

转载自blog.csdn.net/weixin_44355975/article/details/104539999