酷代码 AI
菜单
服务商
DeepSeek字节豆包讯飞星火
更多选项

Java 本地 Map 类:带自动过期删除元素功能,可自定义过期时间

```java import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; public class ExpiringMap<K, V> { private Map<K, V> map = new ConcurrentHashMap<>(); private Map<K, Long> expirationTimes = new ConcurrentHashMap<>(); private ScheduledExecutorService executorService = new ScheduledThreadPoolExecutor(1); public ExpiringMap() { // 启动定时任务,定期检查并删除过期元素 executorService.scheduleAtFixedRate(() -> { long currentTime = System.currentTimeMillis(); for (Map.Entry<K, Long> entry : expirationTimes.entrySet()) { if (entry.getValue() < currentTime) { map.remove(entry.getKey()); expirationTimes.remove(entry.getKey()); } } }, 0, 1, TimeUnit.SECONDS); } public void put(K key, V value, long expirationMillis) { map.put(key, value); expirationTimes.put(key, System.currentTimeMillis() + expirationMillis); } public V get(K key) { if (map.containsKey(key)) { return map.get(key); } return null; } public static void main(String[] args) { ExpiringMap<String, String> expiringMap = new ExpiringMap<>(); expiringMap.put("key1", "value1", 5000); // 5 秒后过期 try { Thread.sleep(6000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(expiringMap.get("key1")); // 应为 null } } ``` 注意: 1. 实际使用中需根据需求调整定时检查的频率和过期时间的精度。 2. 多线程环境下要注意线程安全问题。 3. 对于大量元素的情况,可能需要优化存储和删除的性能。 ######[AI写代码神器 | 470点数解答 | 2025-01-17 08:59:55]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]