急求java代码 不考虑复姓 用hashmap做,编码格式~ 10

急求java代码不考虑复姓用hashmap做,编码格式~txt文件中保存1班同学的姓名,姓名之间用逗号分隔,读入同学姓名,统计每个姓氏的人数,按照多少次数排序。统计我们班... 急求java代码 不考虑复姓 用hashmap做,编码格式~txt文件中保存1班同学的姓名,姓名之间用逗号分隔,读入同学姓名,统计每个姓氏的人数,按照多少次数排序。统计我们班同学“名字”中哪个字的出现频率最高。 展开
 我来答
chenhao_89
2017-05-18 · TA获得超过1352个赞
知道小有建树答主
回答量:764
采纳率:83%
帮助的人:424万
展开全部

把下面的的名字复制到你的names.txt中,保存在和你的java同一目录下

王二,李大,张三,张四,王五,刘一,张长

Java代码如下

import java.io.File;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

public class ReadSurname {
    public static void main(String[] args) throws Exception {
        String file = "你存放txt格式的地址/names.txt";
        Map<String, Integer> map = createMap(getNames(file));

        //sort map
        MapComparator comparator = new MapComparator(map);
        Map<String, Integer> newMap = new TreeMap<>(comparator);
        newMap.putAll(map);

        for(Map.Entry<String, Integer> entries : newMap.entrySet()) {
            System.out.println(entries.getKey() + " : " + entries.getValue());
        }
    }

    public static Map<String, Integer> createMap(String[] names) {
        Map<String, Integer> map = new HashMap<>();
        for(String name : names) {
            String surname = name.substring(0,1);
            if(map.containsKey(surname)) {
                Integer counter = map.get(surname);
                counter ++;
                map.replace(surname, counter);
            } else {
                map.put(surname, 1);
            }
        }
        return map;
    }

    public static String[] getNames(String file) throws Exception{
        File fileLocation = new File(file);
        byte[] buf = Files.readAllBytes(fileLocation.toPath());
        String names = new String(buf, StandardCharsets.UTF_8);

        return names.split("\\,");
    }
}

class MapComparator implements Comparator<Object> {
    Map<String, Integer> map;
    public MapComparator(Map<String, Integer> map) {
        this.map = map;
    }

    public int compare(Object o1, Object o2) {
        if(map.get(o2) == map.get(o1))
            return 1;
        else
            return ((Integer)map.get(o2)).compareTo((Integer)map.get(o1));
    }
}

运行结果:

张 : 3

王 : 2

刘 : 1

李 : 1


追问
你好,报了个错

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式