Java获取List中出现次数最多的的元素
1、思考过程
通常的方法是循环两次获取出现次数最多的元素,时间复杂度n^2,这边就不具体展开了
优化过程的主要思路是寻找一种数据结构可以减少时间复杂度
目前使用的数据结构:num_element
实现过程:
遍历List整理成上面的数据结构的形式
使用Collections.sort(sortList)方法排序list
使用split("_")获取出现次数最多的元素
2、代码
/** * 方法描述:获取List中最多的的元素 * @param list * @param element 元素名称 * @return */ public static String getMostFromList(List<Map<String, Object>> list, String element) { Map<String, Integer> paramMap = Maps.newHashMap(); List<String> sortList = Lists.newArrayList(); for (Map<String, Object> map : list) { if (!ParamValidUtils.isEmpty(map.get(element))) { String param = map.get(element).toString(); if (paramMap.containsKey(param)) { Integer num = paramMap.get(param)+1; paramMap.put(param, num); sortList.add(encapsulation(num, "_"+param)); } else { paramMap.put(param, 1); sortList.add(encapsulation(1, "_"+param)); } } } Collections.sort(sortList); return sortList.get(sortList.size()-1).split("_")[1]; } /** * 方法描述:整理成对应的数据结构num_element * @param codeNum 出现次数 * @param codeName 元素名称 * @return */ public static String encapsulation(Integer codeNum, String codeName) { String codeString = null; if (codeNum<=9) { codeString = "00" + codeNum + codeName; } else if (codeNum<=99) { codeString = "0" + codeNum + codeName; } else if (codeNum<=999) { codeString = codeNum + codeName; } return codeString; }