当前位置: 首页 > 知识库问答 >
问题:

将哈希映射中的一个键的值链接到Java中的另一个键值

张森
2023-03-14

我试图将一个键的值链接到另一个键的值,但似乎无法使其工作。

例如,如果我创建一个哈希映射,我希望能够创建一个键值对,比如(“x”,0)。然后,我希望能够将另一个键值对值添加到第一个键值对中,因此,如果我有(“x”,map.get(“y”))和(“y”,0),我希望能够以某种方式将其链接起来,这样,如果我现在更新y,使其(“y”,10),map。得到(“x”);也应该返回10。

HashMap<String, Integer> map = new HashMap<>();
map.put("x", 0);
map.put("y", 0);

//I now somehow want to link the value of x so its dependent on y

System.out.println(map.get("x"));
//Should return 0

map.put("y", 10);

System.out.println(map.get("x"));
//Should return 10 now

我不知道如何让这个工作,因为x总是得到现在的y值,而不是打印值时的y值。

共有1个答案

翁硕
2023-03-14

如果要将一组键与同一对象关联,可以使用可变对象作为值。例如,可以使用StringBuilder或实现自定义类。

        HashMap<String, StringBuilder> map = new HashMap<>();
        StringBuilder commonValue = new StringBuilder("0");
        map.put("x", commonValue);
        map.put("y", commonValue);

        System.out.println("Value for 'x': " + map.get("x"));
        System.out.println("Value for 'y': " + map.get("y"));

        map.get("y").insert(0, 1); // or commonValue.insert(0, 1)

        System.out.println("Value for 'x': " + map.get("x"));
        System.out.println("Value for 'y': " + map.get("y"));

具有通用可变容器的替代选项。

    public class Container<T> {
        private T value;

        public Container(T value) {
            this.value = value;
        }

        public T getValue() {
            return value;
        }

        public void setValue(T value) {
            this.value = value;
        }

        @Override
        public String toString() {
            return String.valueOf(value);
        }
    }

基本上都是相同的代码:

        HashMap<String, Container<Integer>> map = new HashMap<>();
        Container<Integer> commonValue = new Container<Integer>(0);
        map.put("x", commonValue);
        map.put("y", commonValue);

        System.out.println("Value for 'x': " + map.get("x"));
        System.out.println("Value for 'y': " + map.get("y"));

        commonValue.setValue(10);

        System.out.println("Value for 'x': " + map.get("x"));
        System.out.println("Value for 'y': " + map.get("y"));

输出(两个版本)

Value for 'x': 0
Value for 'y': 0
Value for 'x': 10
Value for 'y': 10
 类似资料:
  • 有人能帮我找到一份没有重复的正确清单吗。 我有一个哈希映射列表,比如“HashMap map”,它的大小是4。键值对类似于以下内容 我想创建另一个Hashmap列表,其中包含“uri\u path”的单个条目以及相应计算的平均值和计数。这就是我正在尝试的。理想情况下,新列表的大小应小于原始列表的大小。有人能帮我理解是不是出了问题

  • 问题内容: 我正在尝试建立一个PostgreSQL表,该表具有两个指向另一个表中相同主键的外键。 运行脚本时出现错误 sqlalchemy.exc.AmbiguousForeignKeysError:无法确定关系Company.stakeholder的父/子表之间的联接条件- 有多个链接表的外键路径。指定“ foreign_keys”参数,提供这些列的列表,这些列应被视为包含对父表的外键引用。 那

  • 我是Java中Spring框架的新手。并且有一些问题… 我的应用程序使用Spring、Spring seq的安全性、Hibernate框架。 我正在编写一些简单的应用程序。 我有一个页面,可以通过Hibernate将用户添加到db。 用户类: 角色类: 保存在控制器中: 在UserDAO中保存 我在页面上有一个选择块,我可以在其中选择用户角色作为字符串。 所以在保存用户时,我有 所以据我所知,我应

  • 通常,当哈希映射中的同一个键有多个值时,我找到的答案将使用列表或数组列表来存储值部分。例如: 我想知道是否可以保留hashmap的正常定义并将任何新值附加到旧值(逗号分隔)。类似于这样: } 前面的代码是填充hashmaps,接下来读取单个值时,使用拆分(“,”)并将它们存储在字符串数组中。类似于:

  • 我有 2 个数组: 我希望array1元素成为新Hash中的键,array2元素成为同一个Hash中相应的值。有人能建议一下怎么做吗? 谢谢

  • 有没有办法创建一个同时包含键和值的映射(我指的是单行代码)?例如,我创建了一个名为map的映射,每当我想添加一对新的键/值时,我都需要使用方法“put”。当我们创建地图时,有没有一种更短的方法来填充它?