You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

3.4 KiB

代码审查报告(Cache<K,V> 泛型缓存类)

一、代码整体评价

这段代码整体质量很高,实现了一个基于泛型的键值缓存,功能完整、结构清晰、符合 Java 编码规范,完全满足作业要求。

二、代码优点

正确使用泛型 <K,V>泛型定义规范,支持任意类型的键值对,通用性强。

封装性良好使用 private final Map<K,V> 存储数据,外部无法直接修改,保证数据安全。

功能完整实现了缓存的核心操作:

添加 put

获取 get

删除 remove

判断存在 containsKey

清空 clear

获取大小 size

代码简洁易读方法命名规范、注释清晰、逻辑直白,符合 Java 标准写法。

自带测试方法main 方法提供完整测试用例,可直接运行验证功能。

依赖合理基于 HashMap 实现,性能高效,适合缓存场景。

三、代码存在的问题

这些不是错误,只是不够规范:

没有对 null 做安全处理

允许存入 null 键 / 值

获取时可能返回 null,外部使用容易空指针

→ 建议增加非空校验

线程不安全HashMap 是非线程安全的,多线程环境下会出现数据错误。

没有最大容量限制无缓存上限,不断存入会导致内存占用过高。

无过期策略真实缓存都有过期时间,当前代码数据永久保存。

缺少 toString () 方法无法直接打印查看缓存内容,调试不方便。

四、改进后的优化代码

import java.util.HashMap;

import java.util.Map;

import java.util.Objects;

public class Cache<K, V> {

private final Map<K, V> cacheMap;

public Cache() {

this.cacheMap = new HashMap<>();

}

// 存入缓存(增加非空判断)

public void put(K key, V value) {

Objects.requireNonNull(key, "键不能为空");

Objects.requireNonNull(value, "值不能为空");

cacheMap.put(key, value);

}

// 获取缓存

public V get(K key) {

return cacheMap.get(key);

}

// 删除

public void remove(K key) {

cacheMap.remove(key);

}

// 是否包含

public boolean containsKey(K key) {

return cacheMap.containsKey(key);

}

// 清空

public void clear() {

cacheMap.clear();

}

// 大小

public int size() {

return cacheMap.size();

}

// 打印缓存内容

@Override

public String toString() {

return "Cache{" + "data=" + cacheMap + '}';

}

// 测试

public static void main(String[] args) {

Cache<String, Integer> studentScoreCache = new Cache<>();

studentScoreCache.put("张三", 90);

studentScoreCache.put("李四", 85);

studentScoreCache.put("王五", 95);

System.out.println(studentScoreCache);

System.out.println("张三的分数:" + studentScoreCache.get("张三"));

System.out.println("缓存大小:" + studentScoreCache.size());

studentScoreCache.remove("李四");

System.out.println("删除李四后:" + studentScoreCache);

studentScoreCache.clear();

System.out.println("清空后缓存大小:" + studentScoreCache.size());

}

}