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

Java不同类中向HashMap添加社交图谱个体的问题求助

错误排查与修正方案

现有代码核心错误点

  • SocialGraph无参构造方法语法错误:Java中HashMap初始化不能直接使用map = ("Nobody", <"noone", "noone else" >)这类非规范写法,需要调用HashMap的put方法插入键值对。
  • 带参构造方法未定义泛型:参数HashMap z缺少类型限定,会触发类型安全警告,需要补全泛型约束。
  • 测试类逻辑完全错误:addIndividual是SocialGraph类的成员方法,不是可实例化的类,不能直接new addIndividual(),需要先创建SocialGraph实例,再通过实例调用方法添加个体、添加关系。
  • 缺少添加社交关系的addKnowsArrow方法:需求要求存储「x认识y」的关系,需要在SocialGraph类中补充该方法实现。

修正后完整代码

SocialGraph.java

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class SocialGraph {
    // 存储社交关系图:key为个体名称,value为该个体认识的所有人的列表
    private HashMap<String, List<String>> map = new HashMap<>();

    // 带参构造方法
    public SocialGraph(HashMap<String, List<String>> z) {
        map = z;
    }

    // 无参默认构造方法
    public SocialGraph() {
        // 初始化默认的Nobody节点
        List<String> defaultRelations = new ArrayList<>();
        defaultRelations.add("noone");
        defaultRelations.add("noone else");
        map.put("Nobody", defaultRelations);
    }

    /**
     * 向社交图中添加个体
     * 如果个体已存在则不做任何操作
     */
    public void addIndividual(String a) {
        if (!map.containsKey(a)) {
            map.put(a, new ArrayList<>());
        }
    }

    /**
     * 添加「personA认识personB」的关系
     * 如果两个个体不存在会先自动添加到图中
     */
    public void addKnowsArrow(String personA, String personB) {
        // 先确保两个个体都在图中
        addIndividual(personA);
        addIndividual(personB);
        // 给personA的认识列表添加personB,避免重复添加
        List<String> knowsList = map.get(personA);
        if (!knowsList.contains(personB)) {
            knowsList.add(personB);
        }
    }

    // 可选:打印整个社交图方便调试
    public void printGraph() {
        for (String person : map.keySet()) {
            System.out.println(person + " 认识的人:" + map.get(person));
        }
    }
}

SocialGraphTest.java

public class SocialGraphTest {
    public static void main(String[] args) {
        // 1. 先实例化社交图对象
        SocialGraph socialGraph = new SocialGraph();

        // 2. 添加所有个体
        socialGraph.addIndividual("Anne");
        socialGraph.addIndividual("Daisy");
        socialGraph.addIndividual("Bob");
        socialGraph.addIndividual("Charlie");

        // 3. 添加「x认识y」的关系
        socialGraph.addKnowsArrow("Anne", "Daisy");
        socialGraph.addKnowsArrow("Anne", "Bob");
        socialGraph.addKnowsArrow("Bob", "Daisy");
        socialGraph.addKnowsArrow("Bob", "Charlie");

        // 4. 打印结果验证
        socialGraph.printGraph();
    }
}

运行说明

  • 实例化SocialGraph对象是所有操作的前提,所有添加个体、添加关系的操作都要通过该实例调用对应方法完成
  • addKnowsArrow方法自带个体存在性校验,即使忘记提前调用addIndividual添加个体,也会自动补全,不会抛出空指针异常

内容的提问来源于stack exchange,提问作者Tim Davalan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:48:03