一篇blog的更新

数组中频次最高元素

原文见:判断一个数组中出现次数最多的元素。原文主要是用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次。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值