关于equals和compareTo方法的Java问题

关于equals和compareTo方法的Java问题,java,linked-list,equals,compareto,Java,Linked List,Equals,Compareto,您好,我对Java非常陌生,在linkedList上运行的两个方法有这个问题 我编写的find函数总是返回false。 find方法是将type E元素作为参数,如果该项在链表中,则返回true,否则返回false max方法是,如果列表不为空,则返回列表中的最大元素(本例中为最长字符串),如果列表为空,则返回null。必须通过compareTo()进行比较。 我写的max只看每个元素(字符串)的第一个字母 非常感谢您的帮助 public boolean find(E e){ L

您好,我对Java非常陌生,在linkedList上运行的两个方法有这个问题

我编写的find函数总是返回false。 find方法是将type E元素作为参数,如果该项在链表中,则返回true,否则返回false

max方法是,如果列表不为空,则返回列表中的最大元素(本例中为最长字符串),如果列表为空,则返回null。必须通过compareTo()进行比较。 我写的max只看每个元素(字符串)的第一个字母

非常感谢您的帮助

  public boolean find(E e){
      LinkedListTest<E>.Node node = null;
    Node current =node;
      while (current != null){
          if (current.equals(e)){
              return true;
          }
          else{
              current=current.next;
          }
      }
      return false;
  }
  public E max(){
      Iterator<E> iterator=iterator();
      E max = iterator.next();
      while (iterator.hasNext())
      {  
         E next = iterator.next();
         if (max.compareTo(next) > 0) 
            max = next;
      }
    return max;
  }
公共布尔查找(E){
LinkedListTest.Node节点=null;
节点电流=节点;
while(当前!=null){
if(电流等于(e)){
返回true;
}
否则{
当前=当前。下一步;
}
}
返回false;
}
公共E max(){
迭代器迭代器=迭代器();
E max=迭代器.next();
while(iterator.hasNext())
{  
E next=迭代器.next();
如果(最大比较到(下一个)>0)
max=next;
}
返回最大值;
}

您的
find
始终返回false,因为您将
节点
当前
初始化为null,因此不会进入循环。此外,您应该将e与项进行比较,而不是与节点进行比较

可能是:

public boolean find(E e){
    Node current = head;
    while (current != null){
        if (current.item.equals(e)){

嗨,谢谢你的回复!调用函数时,我将其视为字符串是否正确?System.out.println(lst.find(“Mango”));因为我关心的是,参数是E,但我将字符串称为“Mango”。@Robert是的,您是正确的,因为您创建了
LinkedListTest
,所以在本例中E是字符串。感谢您的帮助!我仍然对max函数感到困惑。@Robert我在max方法中看到的唯一问题是,如果列表为空,它将抛出异常,因为您在检查hasNext()之前调用了第一个next()。max的输出结果是什么?你应该买李子。你还期待什么吗?我想找到最长的字符串元素,它应该返回橙色。所以我想我用compareTo是不对的?因为它是按词典编纂的。关于如何找到最长的字符串元素有什么建议吗?