原文见:判断一个数组中出现次数最多的元素。原文主要是用String类和replaceAll()方法来做,但是如果遇到String[] strArray = {"11", "111", "11", "11", "111", "111", "1"}这样的数组,就会有bug。结果会是1出现的最多,而且出现N次。
现在,贴出改进的方法。不再利用String类和replaceAll()方法,效率不高。改进的方法就是遍历目标数组,把每个元素出现的次数保存在LinkedHashMap中,然后扫描这个map,得到出现次数最多的元素。
import java.util.*; public class FindMostEle { private static LinkedHashMap<String, Integer> map; public static void mostEle(String[] strArray){ map = new LinkedHashMap<String, Integer>(); for(int i=0; i<strArray.length; i++){ if (!map.containsKey(strArray[i])) map.put(strArray[i], 1); else{ int count = map.get(strArray[i]); count ++; map.put(strArray[i], count); } } Set<Map.Entry<String, Integer>> set = map.entrySet(); Iterator<Map.Entry<String, Integer>> iterator = set.iterator(); int max = 0; int temp = 0; int count = 0; String str = ""; while(iterator.hasNext()){ Map.Entry<String, Integer> entry = iterator.next(); temp = entry.getValue(); if (temp >= max){ max = temp; count ++; str += entry.getKey() +" "; } else break; } str = str.trim(); System.out.printf("一共有%1$d元素出现的最多,他们分别是%2$s,分别出现了%3$d次。", count, str, max); } public static void main(String args[]){ String[] strArray = {"11", "111", "11", "11", "111", "111", "1"}; mostEle(strArray); } }
结果:
一共有2元素出现的最多,他们分别是11 111,分别出现了3次。
数组中频次最高元素

被折叠的 条评论
为什么被折叠?



