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