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

如何在存储TeamRecord对象的自定义链表中按队名字段搜索?

看起来你遇到的核心问题是类型不匹配——你的MyLinkedList<TeamRecord>的search方法原本设计用来接收和链表元素同类型的对象(也就是TeamRecord),但你传入的是String类型的球队名称,Java编译器当然会报错。而且teams是链表实例,不是单个TeamRecord对象,所以teams.getTeamName()这种调用本身就不成立。

接下来给你两种解决方案,其中第二种更通用,推荐使用:

方案一:重载search方法,专门针对球队名称搜索

这种方式适合你确定链表只会存储TeamRecord对象的场景,直接在MyLinkedList类里添加一个接收String的重载方法:

public boolean search(String teamName) {
    if (isEmpty()) return false;
    Node<E> temp = head;
    while (temp != null) {
        // 先判断元素类型,避免强转出错
        if (temp.getElement() instanceof TeamRecord) {
            TeamRecord currentTeam = (TeamRecord) temp.getElement();
            if (currentTeam.getTeamName().equals(teamName)) {
                return true;
            }
        }
        temp = temp.getNext();
    }
    return false;
}

然后你原来的调用代码就可以直接用了:

case 5: 
    System.out.println("Enter team name to search: "); 
    String input = console.next(); 
    if(teams.search(input)) 
        System.out.println(input + " is a team."); 
    else 
        System.out.println(input + " is not a team."); 
    break;

方案二:使用Predicate实现通用搜索(推荐)

如果你希望你的MyLinkedList保持泛型的通用性(以后可以存储其他类型的对象),可以新增一个接收Predicate<E>的搜索方法,这样就能自定义匹配逻辑:

// 新增这个通用搜索方法
public boolean search(Predicate<E> matcher) {
    if (isEmpty()) return false;
    Node<E> temp = head;
    while (temp != null) {
        if (matcher.test(temp.getElement())) {
            return true;
        }
        temp = temp.getNext();
    }
    return false;
}

调用的时候用Lambda表达式指定匹配规则(这里就是匹配TeamRecord的teamName):

case 5:
    System.out.println("Enter team name to search: ");
    String input = console.next();
    // 用Lambda定义匹配逻辑:检查当前球队的名称是否等于输入的字符串
    boolean teamExists = teams.search(team -> team.getTeamName().equals(input));
    if(teamExists) {
        System.out.println(input + " is a team.");
    } else {
        System.out.println(input + " is not a team.");
    }
    break;

这种方式的好处是,不管你的链表以后存什么对象(比如User、Product),都可以通过Lambda快速定义搜索规则,非常灵活。

小优化:清理原search方法的冗余代码

你的原search(E element)方法里有一行多余的代码:

Node<E> temp = new Node<E>(element, null);

这行代码新建了一个节点,但马上就把temp赋值为head,完全没用到这个新建的节点,直接删掉就好,优化后的原search方法:

public boolean search(E element) {
    if(isEmpty()) return false;
    Node<E> temp = head; // 直接指向头节点即可
    while(temp != null) {
        if(temp.getElement().equals(element)) return true;
        temp = temp.getNext();
    }
    return false;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:34:25