Java 中的 LimitedTreeMap

LimitedTreeMap in Java

我想要一个 map 是有序的,但同时具有最大数量的元素。例如,如果我在地图中有三个键为 123 的元素,并且我将 4 添加到地图中,地图现在应该包含 2,3,4(只使用最大的三个值)。我怎样才能做到这一点。我应该如何实现 put 方法。欢迎任何帮助:)

class LimitedTreeMap<K extends Number, V> extends TreeMap<K, V> {

    int limitSize;

    public LimitedTreeMap(int limitSize) {
        this.limitSize = limitSize;
    }

    @Override
    public V put(K key, V value) {
        // Add logic for the desired behaviour
        return super.put(key, value);
    }

}

拿到钥匙, 找到最小的, 检查您要添加的密钥是否更大并且应该添加, 添加新密钥(如有必要) 当且仅当地图现在包含三个以上元素时,才移除最小键

显然,如果您希望地图仍然 return 在删除键后添加到其中的三个最大键,这将不起作用。如果你也想要它,你应该考虑添加所有键(排序)并将 get 修改为从不 return 一个不在前三个中的键的值(以及迭代器,删除等,如果你也不希望他们访问前三个之后的任何元素)。

如果达到限制,删除最低键。

class LimitedTreeMap<Long, V> extends TreeMap<Long, V> {

    int limitSize;

    public LimitedTreeMap(int limitSize) {
        this.limitSize = limitSize;
    }

    @Override
    public V put(Long key, V value) {

        // Add logic for the desired behaviour
        V v = super.put(key, value);

        if (this.size() > limitSize)
            this.pollFirstEntry();

        return v;

    }

}