题解 | #简单错误记录#
简单错误记录
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(); } } }