diff --git a/w7-巫秋雨-202506050320/AI 协同学习.txt b/w7-巫秋雨-202506050320/AI 协同学习.txt new file mode 100644 index 0000000..b4d6f78 --- /dev/null +++ b/w7-巫秋雨-202506050320/AI 协同学习.txt @@ -0,0 +1,18 @@ +一、存在问题 +线程不安全 +底层使用HashMap,多线程环境下并发操作会导致数据丢失、死循环等问题。 +空值风险 +允许key和value为null,业务中易引发NullPointerException,且无法区分 “键不存在” 和 “值为 null”。 +无缓存淘汰机制 +数据永久驻留内存,无过期 / 清理策略,长期运行会造成内存泄漏。 +功能单一 +缺少判断键是否存在、获取所有键 / 值等实用方法。 +二、优化建议 +保证线程安全 +将HashMap替换为ConcurrentHashMap,无需加锁即可支持高并发。 +禁止空值存入 +在put方法中增加非空校验,拒绝null键 / 值。 +完善工具方法 +新增containsKey、isEmpty等方法,提升实用性。 +增加基础防御 +对get/remove传入null键时直接返回null,避免异常。 \ No newline at end of file diff --git a/w7-巫秋雨-202506050320/Cache.java b/w7-巫秋雨-202506050320/Cache.java new file mode 100644 index 0000000..4aa0cac --- /dev/null +++ b/w7-巫秋雨-202506050320/Cache.java @@ -0,0 +1,62 @@ +package com.homework; // 必须和你的项目包结构一致 + +import java.util.HashMap; +import java.util.Map; + +public class Cache { + // 用 HashMap 存储键值对,key 和 value 都是泛型 + private Map cacheMap; + + // 构造方法:初始化 HashMap + public Cache() { + cacheMap = new HashMap<>(); + } + + // 存数据:把 key 和 value 放到缓存里 + public void put(K key, V value) { + cacheMap.put(key, value); + } + + // 取数据:根据 key 从缓存里拿 value + public V get(K key) { + return cacheMap.get(key); + } + + // 删除数据:根据 key 删除缓存里的 value + public void remove(K key) { + cacheMap.remove(key); + } + + // 清空缓存 + public void clear() { + cacheMap.clear(); + } + + // 获取缓存大小 + public int size() { + return cacheMap.size(); + } + + // 主方法:测试用 + public static void main(String[] args) { + // 创建缓存:key 是学生姓名(String),value 是分数(Integer) + Cache scoreCache = new Cache<>(); + + // 测试存数据 + scoreCache.put("小明", 90); + scoreCache.put("小红", 95); + System.out.println("缓存大小:" + scoreCache.size()); + + // 测试取数据 + System.out.println("小明的分数:" + scoreCache.get("小明")); + System.out.println("小红的分数:" + scoreCache.get("小红")); + + // 测试删除数据 + scoreCache.remove("小红"); + System.out.println("删除小红后,缓存大小:" + scoreCache.size()); + + // 测试清空缓存 + scoreCache.clear(); + System.out.println("清空后,缓存大小:" + scoreCache.size()); + } +} \ No newline at end of file diff --git a/w7-巫秋雨-202506050320/Pair.java b/w7-巫秋雨-202506050320/Pair.java new file mode 100644 index 0000000..cd72be1 --- /dev/null +++ b/w7-巫秋雨-202506050320/Pair.java @@ -0,0 +1,51 @@ +package com.homework; // 你的包声明,必须和你的目录结构一致 + +public class Pair { + private K key; + private V value; + + // 构造方法 + public Pair(K key, V value) { + this.key = key; + this.value = value; + } + + // Getter & Setter + public K getKey() { + return key; + } + + public void setKey(K key) { + this.key = key; + } + + public V getValue() { + return value; + } + + public void setValue(V value) { + this.value = value; + } + + // 作业要求的 swap 方法:交换 key 和 value + public Pair swap() { + return new Pair<>(this.value, this.key); + } + + // 重写 toString,方便打印 + @Override + public String toString() { + return "key: " + key + ", value: " + value; + } + + // 主方法:测试用 + public static void main(String[] args) { + // 测试 Pair + Pair pair = new Pair<>("年龄", 20); + System.out.println("交换前:" + pair); + + // 调用 swap 方法 + Pair swappedPair = pair.swap(); + System.out.println("交换后:" + swappedPair); + } +} \ No newline at end of file diff --git a/w7-巫秋雨-202506050320/屏幕截图 2026-04-29 220832.png b/w7-巫秋雨-202506050320/屏幕截图 2026-04-29 220832.png new file mode 100644 index 0000000..24135b0 Binary files /dev/null and b/w7-巫秋雨-202506050320/屏幕截图 2026-04-29 220832.png differ diff --git a/w7-巫秋雨-202506050320/屏幕截图 2026-04-29 220935.png b/w7-巫秋雨-202506050320/屏幕截图 2026-04-29 220935.png new file mode 100644 index 0000000..8054408 Binary files /dev/null and b/w7-巫秋雨-202506050320/屏幕截图 2026-04-29 220935.png differ