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

如何在Java泛型链表中按字符串输入搜索节点内容并输出到控制台

泛型链表搜索功能修复方案

原有代码核心问题

  • 匹配逻辑错误:!temp.equals(query)是将链表节点对象和输入字符串直接对比,二者类型完全不同,永远不会匹配成功,正确逻辑应该对比节点存储的data字段的字符串内容和查询词
  • 无空指针防护:遍历过程未判断temp == null的终止条件,当遍历到链表末尾时会触发空指针异常
  • 逻辑不符合需求:原有逻辑找到第一个匹配项就直接返回,无法输出所有匹配结果
  • 职责边界不合理:将用户输入读取逻辑写在通用泛型链表的方法里,会降低类的通用性,建议把查询词作为参数传入,输入逻辑放到上层业务代码
  • 异常声明多余:方法内只有键盘输入读取逻辑,没有文件操作,不需要抛出FileNotFoundException

修复后代码

如果你需要直接在方法内完成输入读取、匹配、控制台输出全流程,修改后的search方法如下:

public void search() {
    Scanner keyboard = new Scanner(System.in);
    System.out.println("Search: ");
    String query = keyboard.nextLine().trim();
    // 空查询拦截
    if (query.isEmpty()) {
        System.out.println("查询内容不能为空");
        return;
    }

    ListNode temp = head;
    int matchCount = 0;
    System.out.println("===== 匹配结果 =====");
    // 遍历全链表
    while (temp != null) {
        // 转小写实现大小写不敏感的模糊匹配,包含查询词即判定为相似
        String dataContent = temp.data.toString().toLowerCase();
        if (dataContent.contains(query.toLowerCase())) {
            System.out.println(temp.data);
            matchCount++;
        }
        temp = temp.link;
    }
    // 无匹配结果提示
    if (matchCount == 0) {
        System.out.println("未找到匹配的内容");
    } else {
        System.out.println("共找到" + matchCount + "条匹配结果");
    }
}

补充说明

  • 遍历效率:链表本身不支持随机访问,只能逐个节点遍历,while循环和for循环的时间复杂度都是O(n),没有性能差异,你原有选择的while遍历方式是合理的
  • 精准匹配优化:如果需要只匹配游戏名称、排除主机名称的匹配,你可以单独定义Game实体类,添加getName()、getConsole()属性方法,将泛型T的实际类型指定为Game,匹配时直接调用temp.data.getName()做对比即可

内容的提问来源于stack exchange,提问作者David Wamai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:09:00