为了账号安全,请及时绑定邮箱和手机立即绑定

Java 多个键直接指向相同的值

Java 多个键直接指向相同的值

慕码人8056858 2021-09-03 10:11:46
有没有办法将多个键指向相同的值?IEHashMap<String, Float> mymap = new HashMap<>();mymap.put("hello",5f);mymap.put("bye",5f);~somehow point bye and hello to the same value~mymap.put("bye", mymap.get("bye") +5f)mymap.get("hello") == 10
查看完整描述

3 回答

?
慕村225694

TA贡献1880条经验 获得超4个赞

Java HashMap 存储对对象的引用。如果您使用两个不同的键存储相同的对象,则键将指向相同的值。


但这不是你的问题。您的问题是您使用的是 Float 值,而 Float 是一种不可变的数据类型。一旦它被创建,你就不能改变它的价值。要实现您想要做的事情,您需要创建一个可变的 Float 或将浮点存储在容器中并将该容器存储在地图中。最简单的容器之一是单元素数组(尽管我只会在示例代码中使用它,而不会在生产代码中使用它,因为它容易出错并且“自我无法记录”)。


HashMap<String, Float[]> mymap = new HashMap<>();

Float[] val = new Float[] { 5f };

mymap.put("hello", val);

mymap.put("bye", val);

...

mymap.get("bye")[0] = mymap.get("bye")[0] + 5f;


mymap.get("hello")[0] == 10f


查看完整回答
反对 回复 2021-09-03
?
慕侠2389804

TA贡献1719条经验 获得超6个赞

为此,您需要一个可变对象作为 Value,例如:


static class FLoatHolder {

    private float f;


    public FLoatHolder(float f) {

        this.f = f;

    }


    public float getF() {

        return f;

    }


    public void setF(float f) {

        this.f = f;

    }

}



    Map<String, FLoatHolder> map = new HashMap<>();

    FLoatHolder fh = new FLoatHolder(5f);

    map.put("bye", fh);

    map.put("hello", fh);


    FLoatHolder holder = map.get("bye");

    holder.setF(holder.getF() + 0.5f);


    map.put("bye", holder);


    System.out.println(map.get("hello").getF());


查看完整回答
反对 回复 2021-09-03
?
斯蒂芬大帝

TA贡献1827条经验 获得超8个赞

如果您只想让两个键指向同一个值,那完全没问题。地图不关心它们指向什么,只是没有冲突的键。


如果您想将整数值相加,那么您的伪代码将按您的意愿工作。


如果您想要类似指针的行为,其中更改键 A 的值会影响键 B 的值,那么您必须创建一个包装对象并使用字段。


就像是:


class Pointer<T> {

    private T t;

    public Pointer(T t) {

        set(t);

    }

    public void set(T t) {

        this.t = t;

    }

    public T get() {

        return t;

    }

}

...

Map<String, Pointer> map = new HashMap<>();

Pointer<Integer> ptr = new Pointer<>(5);


map.put("A", ptr);

map.put("B", ptr);


System.out.println(map.get("A").get());

System.out.println(map.get("B").get());


ptr.set(25);


System.out.println(map.get("A").get());

System.out.println(map.get("B").get());

如果您想要其他东西,您可能需要详细说明或考虑其他数据结构。


查看完整回答
反对 回复 2021-09-03
  • 3 回答
  • 0 关注
  • 293 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信