猿问

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

有没有办法将多个键指向相同的值?

IE


HashMap<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


慕码人8056858
浏览 294回答 3
3回答

慕村225694

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

慕侠2389804

为此,您需要一个可变对象作为 Value,例如:static class FLoatHolder {&nbsp; &nbsp; private float f;&nbsp; &nbsp; public FLoatHolder(float f) {&nbsp; &nbsp; &nbsp; &nbsp; this.f = f;&nbsp; &nbsp; }&nbsp; &nbsp; public float getF() {&nbsp; &nbsp; &nbsp; &nbsp; return f;&nbsp; &nbsp; }&nbsp; &nbsp; public void setF(float f) {&nbsp; &nbsp; &nbsp; &nbsp; this.f = f;&nbsp; &nbsp; }}&nbsp; &nbsp; Map<String, FLoatHolder> map = new HashMap<>();&nbsp; &nbsp; FLoatHolder fh = new FLoatHolder(5f);&nbsp; &nbsp; map.put("bye", fh);&nbsp; &nbsp; map.put("hello", fh);&nbsp; &nbsp; FLoatHolder holder = map.get("bye");&nbsp; &nbsp; holder.setF(holder.getF() + 0.5f);&nbsp; &nbsp; map.put("bye", holder);&nbsp; &nbsp; System.out.println(map.get("hello").getF());

斯蒂芬大帝

如果您只想让两个键指向同一个值,那完全没问题。地图不关心它们指向什么,只是没有冲突的键。如果您想将整数值相加,那么您的伪代码将按您的意愿工作。如果您想要类似指针的行为,其中更改键 A 的值会影响键 B 的值,那么您必须创建一个包装对象并使用字段。就像是:class Pointer<T> {&nbsp; &nbsp; private T t;&nbsp; &nbsp; public Pointer(T t) {&nbsp; &nbsp; &nbsp; &nbsp; set(t);&nbsp; &nbsp; }&nbsp; &nbsp; public void set(T t) {&nbsp; &nbsp; &nbsp; &nbsp; this.t = t;&nbsp; &nbsp; }&nbsp; &nbsp; public T get() {&nbsp; &nbsp; &nbsp; &nbsp; return t;&nbsp; &nbsp; }}...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());如果您想要其他东西,您可能需要详细说明或考虑其他数据结构。
随时随地看视频慕课网APP

相关分类

Java
我要回答