题解 | #简单错误记录#

简单错误记录

https://www.nowcoder.com/practice/2baa6aba39214d6ea91a2e03dff3fbeb

利用LinkHashMap来实现lru, 从而实现保存最新8个记录的功能

import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {


    public static void main(String[] args) {

        HashMap<FileElementDO, Integer> delHistoryData = new HashMap<>();


        LinkedHashMap<FileElementDO, Integer> hashMap = new
        LinkedHashMap<FileElementDO, Integer>() {
            @Override
            protected boolean removeEldestEntry(Map.Entry<FileElementDO, Integer> eldest) {


                boolean del = this.size() > 8;
                if (del) {
                    delHistoryData.put(eldest.getKey(), eldest.getValue());

                }
                return del;
            }
        };
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case

            String line = in.nextLine();

            if (Objects.equals(line, "#")) {
                break;
            }
            String[] split = line.split(" ");

            String fileDireNam = split[0];
            Integer lineNum = Integer.valueOf(split[1]);

            fileDireNam = fileDireNam.substring(fileDireNam.lastIndexOf("\\") + 1);

            int N = fileDireNam.length();

            if (N > 16) {
                fileDireNam = fileDireNam.substring(N - 16);
            }

            FileElementDO fileElementDO = new FileElementDO(fileDireNam, lineNum);
            // 删除列表中有记录
            if (delHistoryData.containsKey(fileElementDO)) {
                continue;
            }
            if (hashMap.containsKey(fileElementDO)) {
                hashMap.put(fileElementDO, hashMap.get(fileElementDO) + 1);
            } else {
                hashMap.put(fileElementDO, 1);
            }
        }


        for (Map.Entry<FileElementDO, Integer> entry : hashMap.entrySet()) {
            FileElementDO key = entry.getKey();
            System.out.println(key.fileName + " " + key.lineNum + " " + entry.getValue());
        }
    }


    static class FileElementDO {
        private String fileName;
        private Integer lineNum;

        FileElementDO(String fileName, Integer lineNum) {
            this.fileName = fileName;
            this.lineNum = lineNum;
        }

        @Override
        public boolean equals(Object obj) {

            if (!(obj instanceof FileElementDO)) {
                return false;
            }
            FileElementDO dest = (FileElementDO) obj;

            return Objects.equals(this.fileName, dest.fileName) &&
                   Objects.equals(this.lineNum, dest.lineNum);

        }

        @Override
        public int hashCode() {
            return fileName.hashCode() + lineNum.hashCode();
        }
    }

}

全部评论

相关推荐

运营你豪哥:简历改改吧-非本、求职意向技术岗、无实习经历、内容空洞 如果简历不爆改的话,应该是会持续崩溃了 1.把你教育经历放最下面去 2.蓝底照片很奇怪哈,感觉还在高中时代,建议白底重新拍一下 3.校园经历没啥必要,收集和反馈同学们对产品的意见,解决学生和老师之间的沟通,企业招聘不看这些哈 好好思考一下简历的设计和你要表达的重点,再去投简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务