算法思路:
使用Map映射表存放每一个数据及出现的次数
再判断次数大小,进而找出重复次数最多的数
Map取数据常用方法:
1、先拿到当前map所有的key 根据key迭代出所有的value
Set<Integer> set = map.keySet();
Iterator<Integer> it = set.iterator();
while(it.hasNext()){
Integer key = it.next();
System.out.println("key:" + key + ", value:" + map.get(key));
}
2、 Map.Entry是Map的一个工具类,提供了从map中读取一行数据的读取,一次可以迭代出map集合中的键值对
Iterator<Map.Entry<Integer, String>> it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Integer, String> entry = it.next();
System.out.println("key:"+entry.getKey() + ", value:"+entry.getValue());
}
实现代码:
package JBArray;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
/**
* 找出数组中重复元素出现最多的数
* @author Dan
*
*/
public class findMostFrequenInArray {
/**
* 思路描述:
* 使用Map映射表存放每一个数据及出现的次数
* 再判断次数大小,进而找出重复次数最多的数
*
* @param a
* @return
*/
public static int findMostFrequenInArray(int[] a){
int result = 0;
int size = a.length;
if(size == 0){
return Integer.MAX_VALUE;
}
//记录每个元素出现的次数
Map<Integer,Integer> m = new HashMap<Integer, Integer>();
for (int i = 0; i < size; i++) {
if (m.containsKey(a[i])) {
m.put(a[i], m.get(a[i])+1);//已有该元素,直接累加
}
else{
m.put(a[i], 1);//插入该元素,次数为1
}
}
//找出出现次数最多的元素
int most = 0;
Iterator iter = m.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
int key = (int) entry.getKey();
int val = (int) entry.getValue();
if (val>most) {
result = key;
most = val;
}
}
return result;
}
public static void main(String[] args) {
int[] arr = {1,5,3,3,4,4,4};
int maxFreNum = findMostFrequenInArray(arr);
System.out.println(maxFreNum);
}
}