Browse Source

上传文件至 'w7-巫秋雨-202506050320'

main
wuqiuyu 2 months ago
parent
commit
857070d8c8
  1. 18
      w7-巫秋雨-202506050320/AI 协同学习.txt
  2. 62
      w7-巫秋雨-202506050320/Cache.java
  3. 51
      w7-巫秋雨-202506050320/Pair.java
  4. BIN
      w7-巫秋雨-202506050320/屏幕截图 2026-04-29 220832.png
  5. BIN
      w7-巫秋雨-202506050320/屏幕截图 2026-04-29 220935.png

18
w7-巫秋雨-202506050320/AI 协同学习.txt

@ -0,0 +1,18 @@
一、存在问题
线程不安全
底层使用HashMap,多线程环境下并发操作会导致数据丢失、死循环等问题。
空值风险
允许key和value为null,业务中易引发NullPointerException,且无法区分 “键不存在” 和 “值为 null”。
无缓存淘汰机制
数据永久驻留内存,无过期 / 清理策略,长期运行会造成内存泄漏。
功能单一
缺少判断键是否存在、获取所有键 / 值等实用方法。
二、优化建议
保证线程安全
将HashMap替换为ConcurrentHashMap,无需加锁即可支持高并发。
禁止空值存入
在put方法中增加非空校验,拒绝null键 / 值。
完善工具方法
新增containsKey、isEmpty等方法,提升实用性。
增加基础防御
对get/remove传入null键时直接返回null,避免异常。

62
w7-巫秋雨-202506050320/Cache.java

@ -0,0 +1,62 @@
package com.homework; // 必须和你的项目包结构一致
import java.util.HashMap;
import java.util.Map;
public class Cache<K, V> {
// 用 HashMap 存储键值对,key 和 value 都是泛型
private Map<K, V> 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<String, Integer> 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());
}
}

51
w7-巫秋雨-202506050320/Pair.java

@ -0,0 +1,51 @@
package com.homework; // 你的包声明,必须和你的目录结构一致
public class Pair<K, V> {
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<V, K> 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<String, Integer>
Pair<String, Integer> pair = new Pair<>("年龄", 20);
System.out.println("交换前:" + pair);
// 调用 swap 方法
Pair<Integer, String> swappedPair = pair.swap();
System.out.println("交换后:" + swappedPair);
}
}

BIN
w7-巫秋雨-202506050320/屏幕截图 2026-04-29 220832.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 388 KiB

BIN
w7-巫秋雨-202506050320/屏幕截图 2026-04-29 220935.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 363 KiB

Loading…
Cancel
Save