You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

HashMap.get()仅最后一个值非空,派对邀请链溯源问题求助

搞定HashMap溯源的null问题!

嘿,我明白你的需求了——从那串连续姓名里提取邀请关系,传入Kate要能追到Jack对吧?现在你的HashMap除了最后一个值,get()都返回null,核心问题肯定是映射关系搞反了,或者遍历配对的时候出了错,咱们一步步来解决:

先理清楚核心逻辑

首先得明确:你要的是反向溯源——从被邀请人找邀请人,再找邀请人的邀请人。那你的HashMap必须存「被邀请人 → 邀请人」的映射,而不是反过来!
比如:

  • Kate是被Thomas邀请的,所以存 Kate → Thomas
  • Thomas是被Jack邀请的,所以存 Thomas → Jack
    这样传入Kate,先get到Thomas,再get Thomas就得到Jack了,完美符合你的需求。

为什么之前会返回null?

大概率你是把「邀请人」当key,「被邀请人」当value存了!比如存的是Thomas → Kate,那你用get("Kate")自然查不到——因为key里根本没有Kate,只有Thomas、Danny这些邀请人。而最后一对是Victor→James,只有用get("James")能查到Victor,这就是你说的“只有最后一个值能拿到”的原因。

修正后的代码示例(Java为例)

我给你写了完整的可运行代码,注释都标清楚了:

import java.util.HashMap;
import java.util.Map;

public class PartyInviteTracker {
    public static void main(String[] args) {
        // 原始姓名字符串
        String namesStr = "Thomas Danny Jack Thomas Danny Mike Thomas Kate Victor James";
        String[] names = namesStr.split(" ");
        
        // 重点:key是被邀请人,value是邀请人
        Map<String, String> inviteMap = new HashMap<>();
        
        // 遍历数组,两两配对(注意要留最后一个元素的位置,避免越界)
        for (int i = 0; i < names.length - 1; i++) {
            String inviter = names[i];       // 前一个是邀请人
            String invitee = names[i + 1];   // 后一个是被邀请人
            inviteMap.put(invitee, inviter); // 存被邀请人→邀请人
        }
        
        // 测试溯源Kate的上级邀请人
        String target = "Kate";
        String directInviter = inviteMap.get(target); // 拿到Thomas
        String finalResult = inviteMap.get(directInviter); // 拿到Jack
        
        System.out.println(finalResult); // 输出Jack
    }
}

关键注意点

  • 映射方向绝对不能搞反:这是解决null问题的核心,一定要把需要查询的对象(被邀请人)作为key
  • 遍历边界要注意:循环到names.length-1就停,不然i+1会触发数组越界
  • 溯源逻辑分两步:先找直接邀请人,再找他的邀请人,就是你要的结果

这样改完之后,不管查哪个被邀请人,都能正确拿到对应的邀请人,再也不会出现null的问题啦!

内容的提问来源于stack exchange,提问作者Home Boy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:11:15