给 HashMap 中的元素设置失效时间

要在HashMap中的元素上设置失效时间,可以使用一个自定义的数据结构,其中每个元素包含键、值和过期时间。然后,可以在访问元素时检查其过期时间,以确保不使用已过期的数据。

示例:如何在ExpiringHashMap中存储带有过期时间的键值对,并在访问时检查过期。

import java.util.HashMap;

public class ExpiringHashMap<K, V> {
    private final HashMap<K, ExpiringValue<V>> map = new HashMap<>();

    // 添加元素到 HashMap 并指定过期时间(毫秒)
    public void put(K key, V value, long expirationMillis) {
        long expirationTime = System.currentTimeMillis() + expirationMillis;
        ExpiringValue<V> expiringValue = new ExpiringValue<>(value, expirationTime);
        map.put(key, expiringValue);
    }

    // 获取元素,如果元素已经过期,返回 null
    public V get(K key) {
        ExpiringValue<V> expiringValue = map.get(key);
        if (expiringValue != null && !expiringValue.isExpired()) {
            return expiringValue.getValue();
        } else {
            map.remove(key); // 如果元素已过期,从 HashMap 中移除
            return null;
        }
    }

    // 内部类,表示带有过期时间的值
    private static class ExpiringValue<V> {
        private final V value;
        private final long expirationTime;

        ExpiringValue(V value, long expirationTime) {
            this.value = value;
            this.expirationTime = expirationTime;
        }

        V getValue() {
            return value;
        }

        boolean isExpired() {
            return System.currentTimeMillis() >= expirationTime;
        }
    }

    public static void main(String[] args) {
        ExpiringHashMap<String, String> expiringHashMap = new ExpiringHashMap<>();

        expiringHashMap.put("key1", "value1", 5000); // 设置过期时间为5秒
        expiringHashMap.put("key2", "value2", 10000); // 设置过期时间为10秒

        // 从 HashMap 中获取元素
        String value1 = expiringHashMap.get("key1");
        String value2 = expiringHashMap.get("key2");

        System.out.println("Value1: " + value1); // 应该打印 "Value1: value1"
        System.out.println("Value2: " + value2); // 应该打印 "Value2: value2"

        // 5秒后再次尝试获取 key1 的值
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        String value1AfterExpiration = expiringHashMap.get("key1");
        System.out.println("Value1 (after expiration): " + value1AfterExpiration); // 应该打印 "Value1 (after expiration): null"
    }
}
  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一只小熊猫呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值