2 changed files with 150 additions and 0 deletions
@ -0,0 +1,103 @@ |
|||||
|
import java.util.HashMap; |
||||
|
import java.util.Map; |
||||
|
import java.util.Set; |
||||
|
|
||||
|
public class Cache<K, V> { |
||||
|
// 使用HashMap作为底层存储
|
||||
|
private Map<K, V> cacheMap; |
||||
|
|
||||
|
// 缓存最大容量(可选)
|
||||
|
private int maxCapacity; |
||||
|
|
||||
|
public Cache() { |
||||
|
this.cacheMap = new HashMap<>(); |
||||
|
this.maxCapacity = Integer.MAX_VALUE; |
||||
|
} |
||||
|
|
||||
|
public Cache(int maxCapacity) { |
||||
|
this.cacheMap = new HashMap<>(); |
||||
|
this.maxCapacity = maxCapacity; |
||||
|
} |
||||
|
|
||||
|
// 添加缓存项
|
||||
|
public void put(K key, V value) { |
||||
|
// 如果达到最大容量,可以实现淘汰策略(这里简单处理)
|
||||
|
if (cacheMap.size() >= maxCapacity && maxCapacity > 0) { |
||||
|
// 简单策略:移除第一个元素
|
||||
|
K firstKey = cacheMap.keySet().iterator().next(); |
||||
|
cacheMap.remove(firstKey); |
||||
|
System.out.println("缓存已满,移除了key: " + firstKey); |
||||
|
} |
||||
|
cacheMap.put(key, value); |
||||
|
} |
||||
|
|
||||
|
// 获取缓存项
|
||||
|
public V get(K key) { |
||||
|
return cacheMap.get(key); |
||||
|
} |
||||
|
|
||||
|
// 删除缓存项
|
||||
|
public V remove(K key) { |
||||
|
return cacheMap.remove(key); |
||||
|
} |
||||
|
|
||||
|
// 检查缓存项是否存在
|
||||
|
public boolean containsKey(K key) { |
||||
|
return cacheMap.containsKey(key); |
||||
|
} |
||||
|
|
||||
|
// 获取缓存大小
|
||||
|
public int size() { |
||||
|
return cacheMap.size(); |
||||
|
} |
||||
|
|
||||
|
// 清空缓存
|
||||
|
public void clear() { |
||||
|
cacheMap.clear(); |
||||
|
} |
||||
|
|
||||
|
// 获取所有key的集合
|
||||
|
public Set<K> keySet() { |
||||
|
return cacheMap.keySet(); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public String toString() { |
||||
|
return "Cache{" + |
||||
|
"size=" + cacheMap.size() + |
||||
|
", maxCapacity=" + maxCapacity + |
||||
|
", entries=" + cacheMap + |
||||
|
'}'; |
||||
|
} |
||||
|
|
||||
|
// 测试方法
|
||||
|
public static void main(String[] args) { |
||||
|
// 创建缓存实例
|
||||
|
Cache<String, Integer> cache = new Cache<>(3); |
||||
|
|
||||
|
// 添加缓存项
|
||||
|
cache.put("a", 1); |
||||
|
cache.put("b", 2); |
||||
|
cache.put("c", 3); |
||||
|
System.out.println("添加三个元素后: " + cache); |
||||
|
|
||||
|
// 获取缓存项
|
||||
|
System.out.println("获取key='b': " + cache.get("b")); |
||||
|
|
||||
|
// 添加第四个元素(触发淘汰)
|
||||
|
cache.put("d", 4); |
||||
|
System.out.println("添加第四个元素后: " + cache); |
||||
|
|
||||
|
// 检查缓存项是否存在
|
||||
|
System.out.println("key='a'是否存在: " + cache.containsKey("a")); |
||||
|
System.out.println("key='d'是否存在: " + cache.containsKey("d")); |
||||
|
|
||||
|
// 删除缓存项
|
||||
|
cache.remove("c"); |
||||
|
System.out.println("删除key='c'后: " + cache); |
||||
|
|
||||
|
// 清空缓存
|
||||
|
cache.clear(); |
||||
|
System.out.println("清空缓存后: " + cache); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,47 @@ |
|||||
|
public class Pair<K, V> { |
||||
|
private K key; |
||||
|
private V value; |
||||
|
|
||||
|
public Pair(K key, V value) { |
||||
|
this.key = key; |
||||
|
this.value = value; |
||||
|
} |
||||
|
|
||||
|
public K getKey() { |
||||
|
return key; |
||||
|
} |
||||
|
|
||||
|
public V getValue() { |
||||
|
return value; |
||||
|
} |
||||
|
|
||||
|
public void setKey(K key) { |
||||
|
this.key = key; |
||||
|
} |
||||
|
|
||||
|
public void setValue(V value) { |
||||
|
this.value = value; |
||||
|
} |
||||
|
|
||||
|
// swap方法:交换key和value的位置
|
||||
|
public Pair<V, K> swap() { |
||||
|
return new Pair<>(this.value, this.key); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public String toString() { |
||||
|
return "Pair{" + |
||||
|
"key=" + key + |
||||
|
", value=" + value + |
||||
|
'}'; |
||||
|
} |
||||
|
|
||||
|
// 测试方法
|
||||
|
public static void main(String[] args) { |
||||
|
Pair<String, Integer> pair = new Pair<>("age", 25); |
||||
|
System.out.println("原始Pair: " + pair); |
||||
|
|
||||
|
Pair<Integer, String> swapped = pair.swap(); |
||||
|
System.out.println("交换后Pair: " + swapped); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue