From 3cbea43cd7aa0aeeee6bbfe3e876779df641e230 Mon Sep 17 00:00:00 2001 From: Huangruoyan <1471801269@qq.com> Date: Wed, 29 Apr 2026 15:08:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=96=87=E4=BB=B6=E8=87=B3?= =?UTF-8?q?=20'W8-=E9=BB=84=E8=8B=A5=E5=A6=8D-202506050310'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- W8-黄若妍-202506050310/AI协助记录.txt | 4 ++ W8-黄若妍-202506050310/Cache.java | 54 ++++++++++++++++++++ W8-黄若妍-202506050310/Pair.java | 48 +++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 W8-黄若妍-202506050310/AI协助记录.txt create mode 100644 W8-黄若妍-202506050310/Cache.java create mode 100644 W8-黄若妍-202506050310/Pair.java diff --git a/W8-黄若妍-202506050310/AI协助记录.txt b/W8-黄若妍-202506050310/AI协助记录.txt new file mode 100644 index 0000000..9ee419f --- /dev/null +++ b/W8-黄若妍-202506050310/AI协助记录.txt @@ -0,0 +1,4 @@ +我向 AI 提问了解了 Java 泛型擦除后,如何通过反射获取类、字段、方法声明中保留的泛型信息,也用 AI 审查了自己写的 Cache 代码,检查了线程安全、空值处理和边界条件。同时,我也加深了对 “Java 泛型不支持基本类型” 的理解,明确了擦除机制和自动装箱的作用,为后续实验和代码优化理清了方向 +线程安全:当前实现使用HashMap,不是线程安全的,如果需要多线程环境使用,建议改用ConcurrentHashMap。 +缓存淘汰策略:目前的Cache没有过期或淘汰机制,实际使用中可以添加LRU、FIFO等策略。 +空值处理:put(null, null)是允许的,如果业务不允许空值,可以在方法中添加校验。 \ No newline at end of file diff --git a/W8-黄若妍-202506050310/Cache.java b/W8-黄若妍-202506050310/Cache.java new file mode 100644 index 0000000..f67c830 --- /dev/null +++ b/W8-黄若妍-202506050310/Cache.java @@ -0,0 +1,54 @@ +import java.util.HashMap; +import java.util.Map; + +public class Cache { + // 用Map存储缓存数据 + private final Map cacheMap; + + public Cache() { + cacheMap = new HashMap<>(); + } + + // 存入缓存 + public void put(K key, V value) { + cacheMap.put(key, value); + } + + // 读取缓存 + public V get(K key) { + return cacheMap.get(key); + } + + // 判断是否包含key + public boolean containsKey(K key) { + return cacheMap.containsKey(key); + } + + // 移除缓存 + 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) { + Cache studentScoreCache = new Cache<>(); + studentScoreCache.put("张三", 90); + studentScoreCache.put("李四", 85); + + System.out.println("张三的分数: " + studentScoreCache.get("张三")); + System.out.println("缓存大小: " + studentScoreCache.size()); + + studentScoreCache.remove("李四"); + System.out.println("移除李四后缓存大小: " + studentScoreCache.size()); + } +} \ No newline at end of file diff --git a/W8-黄若妍-202506050310/Pair.java b/W8-黄若妍-202506050310/Pair.java new file mode 100644 index 0000000..75cc9dd --- /dev/null +++ b/W8-黄若妍-202506050310/Pair.java @@ -0,0 +1,48 @@ +public class Pair { + private K key; + private V value; + + // 构造方法 + public Pair(K key, V value) { + this.key = key; + this.value = value; + } + + // 交换 key 和 value 的方法(注意:交换后类型会变为 Pair) + public Pair swap() { + return new Pair<>(this.value, this.key); + } + + // 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; + } + + @Override + public String toString() { + return "Pair{" + + "key=" + key + + ", value=" + value + + '}'; + } + + // 测试 + public static void main(String[] args) { + Pair pair = new Pair<>("age", 20); + System.out.println("原Pair: " + pair); + Pair swappedPair = pair.swap(); + System.out.println("交换后: " + swappedPair); + } +} \ No newline at end of file