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;
}