不可变键-Java中的固定长度映射

DsC*_*Cpp 5 java collections immutability

Java中有没有一种方法可以创建具有固定大小和长度的集合(地图)?即,我想用K个常量键(例如字符串)对其进行初始化,但仍然希望能够更改其值。

编辑: 测试用例具有固定数量的对象,每个对象对应一个数字(浮点数)。每次应用程序中发生特定事件时,我都希望将集合中的所有数字相乘,除了与“引起”该事件的对象相对应的数字。从逻辑上讲,该数字不是对象的属性。

Car*_*tem 4

我建议您首先查看Mike 的答案,了解如何解决此问题,然后对他提供的代码进行一些更改,以便它适用于您的情况:

import java.util.HashMap;

public class InstrumentedHashMap<K> extends HashMap<K, Float> {

    private static final long serialVersionUID = 1L;
    private int max;

    public InstrumentedHashMap(int capacity) {
        super();
        this.max = capacity;
    }

    @Override
    public Float put(K key, Float value) {
        if (super.size() >= this.max && !super.containsKey(key)) {
            return null;
        } else {
            super.put(key, value);
            return value;
        }
    }

    public void event(K trigger, int multiplyAmount, float subtractAmount) {
        super.entrySet().stream().forEach(e -> {
            if (!e.getKey().equals(trigger))
                e.setValue(e.getValue() * multiplyAmount);
            else
                e.setValue(e.getValue() - subtractAmount);
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

您可以使用该InstrumentedHashMap#event方法来处理“特定事件”,参数multiplyAmount是您想要与浮点相乘的值。