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

是否可以只将一个HashMap的值添加到另一个HashMap中?

宋琛
2023-03-14

我有一个散列表

这是我的代码

public static BinaryTreeNode parentMapToTree(Map<Integer, Integer> map) {
    HashMap<BinaryTreeNode, Integer> l = new HashMap<>();
    for (int i = 0; i < map.keySet().size(); i++){
      BinaryTreeNode node = new BinaryTreeNode(i);
      l.put(node, map.values());
    }

我应该对我的代码做什么样的修改来确保它能按照我的要求编译和运行?

共有2个答案

南门新荣
2023-03-14

首先,请注意你所拥有的:

public static BinaryTreeNode parentMapToTree(Map<Integer, Integer> map) {
    HashMap<BinaryTreeNode, Integer> l = new HashMap<>();
    for (int i = 0; i < map.keySet().size(); i++){
      BinaryTreeNode node = new BinaryTreeNode(i);
      l.put(node, map.values());
    }

BinaryTreeNode node = new BinaryTreeNode(i);可能是错误的 - 只是索引,这并没有真正的意义,因为 HashMap 没有以任何定义的方式排序。

<代码>l。put(节点,map.values())也是错误的-这里您插入的值是整个原始地图。

您可以通过将键集转换为可索引结构(如列表-它当前是一个集合)来保存当前代码,然后获取该索引处的键,将其转换为Binary TreeNode,在旧映射中查找与它们键关联的值,然后将两者添加

我可能有一些语法错误(我不在编译器面前),但这看起来像这样:

public static BinaryTreeNode parentMapToTree(Map<Integer, Integer> map) {
    List keyList = ArrayList(map.keySet());
    HashMap<BinaryTreeNode, Integer> l = new HashMap<>();
    for (int i = 0; i < keyList().size(); i++){
      Integer key = keyList.get(i);
      BinaryTreeNode node = new BinaryTreeNode(key);
      l.put(node, map.get(key));
    }

但就我个人而言,我认为这是一个非常糟糕的方式。

您可能想做的是迭代条目集:

public static BinaryTreeNode parentMapToTree(Map<Integer, Integer> map) {
    HashMap<BinaryTreeNode, Integer> l = new HashMap<>();
    for (entry in map.entrySet()){
      BinaryTreeNode node = new BinaryTreeNode(entry.getKey());
      l.put(node, entry.getValue());
    }

后一种方法更干净,因为它不需要手动处理索引,这通常是一种糟糕的做法。如果使用< code>stream()和< code>map()函数来完成整个过程,而不使用任何for循环,而是一步一步来完成,那就更好了。:)

谭坚诚
2023-03-14

如果需要保持插入顺序,则需要创建LinkedHashMap。HashMap的顺序不高。

  LinkedHashMap<BinaryTreeNode, Integer> l = new LinkedHashMap<>();

它的工作方式类似于哈希图,但保留了顺序。

 类似资料:
  • 早上好, 很抱歉,如果这已经被问到了,但我正在构建一个java项目。 它是一个程序,允许用户插入投注(例如体育比赛的预测结果),并在以后允许用户插入所述比赛的最终结果。 这是由2个LinkedHashMaps完成的。一个键值对用户和预测分数,一个键值对用户和最终分数。 两个 LinkedHashMap 中键的顺序将与它们从另一个带有用户名称的数组获取键输入的顺序相同。因此,每次都只设置预测的和确定

  • 我有一个HashMap,一个键作为某个类的对象,一个值作为另一个HashMap,它的键是一个字符串,值是一个双倍: 我需要一个循环,将键(对象)和值(HashMaps)添加到这个HashMap,但我不能在循环中创建一个新的HashMap变量作为它的值。本质上,每个MyClass对象都必须具有具有相应Double的Strings。 这可能吗?这有什么意义吗??

  • 我有两个哈希图。其中每一个都有键,就像下面的hashmap一样。 此映射由DB2数据库查询输出的值填充。我注意到,即使我有两个这样的hashmap,并且如果我尝试检索hashmap键的值,它也总是返回null。我通过在监视窗口中添加所有需要的变量进行了检查。我觉得一切都很好。 我的代码的一小部分。 注意:inputMessageDbRecords的类型是

  • 问题内容: 我需要初始化一个常量HashMap,并希望在一行语句中完成它。避免这样的事情: 类似于目标C: 看了这么多,我还没有找到任何显示如何做到这一点的例子。 问题答案: 您可以使用 Double Brace初始化 ,如下所示: 作为警告,请参阅Java的效率效率“ Double BraceInitialization”,了解它可能带来的性能影响。

  • 问题内容: 这是一些示例代码…我似乎总是会收到ClassCastException …有人指出我在做什么错吗? 问题答案: 为了被添加到(以自然顺序),一个类应该与其自身具有可比性: 而在您的情况下与:

  • 下面是HashMap中包含的值 获取第一个键(即活动键)的Java代码 我们如何收集第一个键“值”(即33),我想把“键”和“值”都存储在单独的变量中。