java取出重复数最多的前n条数据

您所在的位置:网站首页 mqtt50协议 java取出重复数最多的前n条数据

java取出重复数最多的前n条数据

2023-02-22 08:23| 来源: 网络整理| 查看: 265

前两天面试时有问到这个问题(读取一个文本文件中数据,每行是一条URL且存在URL重复,统计重复最多的前10条URL及其重复数量),因为紧张一时半会没想明白,下来后整理了下思路发现实现方式还是蛮多的,这里学习总结一下:

这种问题考的其实就是List和map的使用,这里就先贴上两种方法

第一种,使用Map.entrySet()方法,代码如下:

public static void (List lists) { Map maps = new HashMap(); /*for(String str:lists){ if(maps.containsKey(str)){ //如果重复则将对应的value值加1 maps.put(str,maps.get(str)+1); }else{ maps.put(str,1); } }*/ for (String str : lists) { if (!maps.containsKey(str)) { //取出不重复的数据和对应的条数加入map maps.put(str, Collections.frequency(lists, str)); //Collections.frequency方法计算数据在list中的数量 } } List result = new ArrayList(maps.entrySet()); Collections.sort(result, new Comparator() { /* *使用匿名内部类重写排序算法 * */ @Override public int compare(Map.Entry o1, Map.Entry o2) { return o2.getValue().compareTo(o1.getValue()); //根据每个Entry对象的value值排序 } }); System.out.println("result size: " + result.size() + " \n result: " + result.toString()); }

lists参数值如下:

lists: [add: 1, add: 2, add: 3, add: 4, add: 5, add: 3, add: 7, add: 4, add: 3, add: 10, add: 11, add: 3, add: 13, add: 14, add: 3, add: 4, add: 17, add: 3, add: 19, add: 10]

方法结果如下:

result size: 12 result: [add: 3=6, add: 4=3, add: 10=2, add: 17=1, add: 19=1, add: 13=1, add: 7=1, add: 14=1, add: 11=1, add: 5=1, add: 2=1, add: 1=1]

第二种:使用两个ArrayList对应存储(一个存储数据,一个存储数量,相互使用下标同步)排序,代码如下:

public static void staData2(List lists){ List res=new ArrayList(); List liss=new ArrayList(); /*for(int i=0;i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3