欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

获取list集合中出现次数最多的一项及其出现的次数

程序员文章站 2024-01-14 09:06:40
...

前提准备

 	List<String> list = new ArrayList<>();
    list.add("a");
    list.add("a");
    list.add("a");
    list.add("b");
    list.add("b");
    list.add("c");
    list.add("d");
    list.add("d");

方法一

	long start1 = System.currentTimeMillis();
    Map<String,Integer> map = new HashMap<>();
    for(String str:list){
        Integer i = 1; //定义一个计数器,用来记录重复数据的个数
        if(map.get(str) != null){
            i=map.get(str)+1;
        }
        map.put(str,i);
    }
    System.out.println("重复数据的个数:"+map.toString());
    int max=0;
    String key = null;
    for(Map.Entry<String,Integer> entry:map.entrySet()){
        if(entry.getValue()>max){
            max = entry.getValue();
            key = entry.getKey();
        }
    }
    long end1 = System.currentTimeMillis();
    System.out.println("方法一  字符串 " + key + " 出现的最大次数:"+ max) ;  //字符串 aa 出现的最大次数:4

    System.out.print("重复的数据为:");
    for(String s:map.keySet()){
        if(map.get(s) > 1){
            System.out.print(s+" ");
        }
    }
    
    System.out.println("\n\n--------我是方法分界线---------\n");
    

方法二

	long start2 = System.currentTimeMillis();
    String regex;
    Pattern p;
    Matcher m;
    String tmp = "";
    String tot_str = list.toString();
    //System.out.println(tot_str);   //[aa, aa, aa, aa, bb, bb, cc, cc, dd, ed]
    int max_cnt = 0;
    String max_str = "";
    for(String str : list) {
        if (tmp.equals(str)) continue;
        tmp = str;
        regex = str;
        p = Pattern.compile(regex);
        m = p.matcher(tot_str);
        int cnt = 0;
        while(m.find()) {
            cnt++;
        }
        //System.out.println(str + ":" + cnt);
        if (cnt > max_cnt) {
            max_cnt = cnt;
            max_str = str;
        }
    }
    long end2 = System.currentTimeMillis();
    System.out.println("方法二  字符串 " + max_str + " 出现的最大次数:"+ max_cnt) ;  //字符串 aa 出现的最大次数:4

	System.out.println("方法一耗时:" + (end1 - start1)) ;
    System.out.println("方法二耗时:" + (end2 - start2)) ;
    System.out.println("总耗时:" + (end2 - start1)) ;

结果

重复数据的个数:{a=3, b=2, c=1, d=2}
方法一  字符串 a 出现的最大次数:3
重复的数据为:a b d 

--------我是方法分界线---------

方法二  字符串 a 出现的最大次数:3
方法一耗时:1
方法二耗时:2
总耗时:3

获取list集合中出现次数最多的一项及其出现的次数

相关标签: 常用方法