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
相关产品推荐
相关产品推荐

