Browse Source

上传文件至 'w8'

main
yuangandong 4 weeks ago
parent
commit
98ae995b74
  1. 116
      w8/1
  2. 65
      w8/2

116
w8/1

@ -0,0 +1,116 @@
import java.util.*;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class Cache<K, V> {
private final Map<K, V> store;
private final int maxCapacity;
private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
public Cache(int maxCapacity) {
if (maxCapacity <= 0) {
throw new IllegalArgumentException("最大容量应为正数");
}
this.maxCapacity = maxCapacity;
this.store = new LinkedHashMap<K, V>(16, 0.75f, true) {
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> eldest) {
return size() > maxCapacity;
}
};
}
public V put(K key, V value) {
lock.writeLock().lock();
try {
return store.put(key, value);
} finally {
lock.writeLock().unlock();
}
}
public V get(K key) {
lock.readLock().lock();
try {
return store.get(key);
} finally {
lock.readLock().unlock();
}
}
public V remove(K key) {
lock.writeLock().lock();
try {
return store.remove(key);
} finally {
lock.writeLock().unlock();
}
}
/**
* 清空所有缓存。
*/
public void clear() {
lock.writeLock().lock();
try {
store.clear();
} finally {
lock.writeLock().unlock();
}
}
/**
* 当前缓存中的条目数。
*/
public int size() {
lock.readLock().lock();
try {
return store.size();
} finally {
lock.readLock().unlock();
}
}
/**
* 判断是否包含某个键。
*/
public boolean containsKey(K key) {
lock.readLock().lock();
try {
return store.containsKey(key);
} finally {
lock.readLock().unlock();
}
}
@Override
public String toString() {
lock.readLock().lock();
try {
return store.toString();
} finally {
lock.readLock().unlock();
}
}
// ---------- 测试示例 ----------
public static void main(String[] args){
Cache<String,Integer> hc1 = new Cache<String,Integer>(3);
hc1.put("a",10);
hc1.put("b",6);
hc1.put("c",3);
System.out.println("b的值为" + hc1.get("b"));
System.out.println("a的值为" + hc1.get("a"));
System.out.println("缓存1的条目数(键值对数)为" + hc1.size());
hc1.remove("b");
System.out.println("删去b后,缓存1的条目数(键值对数)为" + hc1.size());
System.out.println("键中是否含有b:" + hc1.containsKey("b"));
hc1.clear();
System.out.println("清空缓存1后,缓存1的条目数(键值对数)为" + hc1.size());
}
}

65
w8/2

@ -0,0 +1,65 @@
public class Pair<K, V> {
private K key;
private V value;
public Pair() {
this(null, null);
}
public Pair(K key, V value) {
this.key = key;
this.value = value;
}
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 "(" + key + ", " + value + ")";
}
public static <K,V> Pair<V,K> swap(Pair<K,V> pair){
return new Pair<>(pair.getValue(),pair.getKey());
}
// ---------- 测试示例 ----------
public static void main(String[] args) {
// 创建不同类型的 Pair 实例
Pair<String, Integer> pair1 = new Pair<>("age", 25);
Pair<String, String> pair2 = new Pair<>("name", "Alice");
Pair<Integer, Double> pair3 = new Pair<>(100, 99.5);
// 输出初始内容
System.out.println("pair1: " + pair1);
System.out.println("pair2: " + pair2);
System.out.println("pair3: " + pair3);
// 测试 getter
System.out.println("pair1 key: " + pair1.getKey() + ", value: " + pair1.getValue());
// 测试 setter
pair1.setValue(30);
System.out.println("修改后 pair1: " + pair1);
// 泛型方法使用示例:交换两个 Pair 的值(演示泛型灵活性)
Pair<String, Integer> a = new Pair<>("x", 1);
System.out.println("交换前: a=" + a );
Pair<Integer,String> b = swap(a);
System.out.println("交换后: b=" + b );
}
}
Loading…
Cancel
Save