3 changed files with 106 additions and 0 deletions
@ -0,0 +1,4 @@ |
|||||
|
我向 AI 提问了解了 Java 泛型擦除后,如何通过反射获取类、字段、方法声明中保留的泛型信息,也用 AI 审查了自己写的 Cache<K,V> 代码,检查了线程安全、空值处理和边界条件。同时,我也加深了对 “Java 泛型不支持基本类型” 的理解,明确了擦除机制和自动装箱的作用,为后续实验和代码优化理清了方向 |
||||
|
线程安全:当前实现使用HashMap,不是线程安全的,如果需要多线程环境使用,建议改用ConcurrentHashMap。 |
||||
|
缓存淘汰策略:目前的Cache没有过期或淘汰机制,实际使用中可以添加LRU、FIFO等策略。 |
||||
|
空值处理:put(null, null)是允许的,如果业务不允许空值,可以在方法中添加校验。 |
||||
@ -0,0 +1,54 @@ |
|||||
|
import java.util.HashMap; |
||||
|
import java.util.Map; |
||||
|
|
||||
|
public class Cache<K, V> { |
||||
|
// 用Map存储缓存数据
|
||||
|
private final Map<K, V> 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<String, Integer> 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()); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,48 @@ |
|||||
|
public class Pair<K, V> { |
||||
|
private K key; |
||||
|
private V value; |
||||
|
|
||||
|
// 构造方法
|
||||
|
public Pair(K key, V value) { |
||||
|
this.key = key; |
||||
|
this.value = value; |
||||
|
} |
||||
|
|
||||
|
// 交换 key 和 value 的方法(注意:交换后类型会变为 Pair<V, K>)
|
||||
|
public Pair<V, K> 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<String, Integer> pair = new Pair<>("age", 20); |
||||
|
System.out.println("原Pair: " + pair); |
||||
|
Pair<Integer, String> swappedPair = pair.swap(); |
||||
|
System.out.println("交换后: " + swappedPair); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue