Java链接列表搜索

Java链接列表搜索,java,search,Java,Search,我有一个链接列表: LinkedList<Cookies> linkList = new LinkedList<>(); linkList.add(new Cookies("Name1", 2, 2)); linkList.add(new Cookies("Name2", 3, 1)); linkList.add(new Cookies("Name3", 1, 6)); linkList.add(new Cookies("Name4", 2, 2)); linkList.

我有一个链接列表:

LinkedList<Cookies> linkList = new LinkedList<>();
linkList.add(new Cookies("Name1", 2, 2));
linkList.add(new Cookies("Name2", 3, 1));
linkList.add(new Cookies("Name3", 1, 6));
linkList.add(new Cookies("Name4", 2, 2));
linkList.add(new Cookies("Name2", 4, 2));
我已经这样做了,但它返回false/未找到

boolean found = linkList.contains(new Cookies("Name2", 3, 1));
System.out.println("Found: " + found);

您需要在
Cookies
类中实现
equals
方法,以便
linkList.contains
按预期工作

class Cookie{
   @Override
   boolean equals(Object cookie){
   ..
  }
}
否则将调用
Object.equals
,检查引用相等性,这意味着

linkList.contains(new Cookies("Name2", 3, 1)); 

始终为false

如果两个Cookie对象包含相同的值(或至少相同的名称),则必须在Cookie类中实现equals()方法才能返回true


另外,实现hashCode()方法为Cookie对象返回相同的值,如果equals()将返回true。

如果这是您学习Java的开始,那么我想这意味着学习列表如何工作以及如何循环列表和重写toString等

下面是一个例子

import java.util.*;

public class TTT {
  public static void main(String[] argv) {
    LinkedList<Cookies> linkList = new LinkedList<>();
    linkList.add(new Cookies("Name1", 2, 2));
    linkList.add(new Cookies("Name2", 3, 1));
    linkList.add(new Cookies("Name3", 1, 6));
    linkList.add(new Cookies("Name4", 2, 2));
    linkList.add(new Cookies("Name2", 4, 2));

    for(int i=0; i<linkList.size(); i++ ) {
        Cookies c = linkList.get(i);
        if( c.getName().equals("Name2")) {
          System.out.println(c);
        }
    }
  }
}

class Cookies {
    String n;
    int a;
    int b;

    public Cookies(String n, int a, int b) {
      this.n = n;
      this.a = a;
      this.b = b;
    }

    public String getName() {
        return n;
    }

    public String toString() {
        return n+", " + a + ", " + b;
    }
}
import java.util.*;
公共类TTT{
公共静态void main(字符串[]argv){
LinkedList linkList=新建LinkedList();
添加(新Cookies(“名称1”,2,2));
添加(新Cookies(“名称2”,3,1));
添加(新Cookies(“名称3”,1,6));
添加(新Cookies(“名称4”,2,2));
添加(新Cookies(“名称2”,4,2));

对于(int i=0;如果Cookies是一个用户定义的类,您是否为该类创建了一个比较器?它返回false的原因是您创建了一个完全独立的对象。尽管该新对象包含相同的数据,但它与列表中的对象不同。这就像说两个不同的苹果具有相同的属性一样品质(形状、大小、颜色)都是相同的苹果。可能是
import java.util.*;

public class TTT {
  public static void main(String[] argv) {
    LinkedList<Cookies> linkList = new LinkedList<>();
    linkList.add(new Cookies("Name1", 2, 2));
    linkList.add(new Cookies("Name2", 3, 1));
    linkList.add(new Cookies("Name3", 1, 6));
    linkList.add(new Cookies("Name4", 2, 2));
    linkList.add(new Cookies("Name2", 4, 2));

    for(int i=0; i<linkList.size(); i++ ) {
        Cookies c = linkList.get(i);
        if( c.getName().equals("Name2")) {
          System.out.println(c);
        }
    }
  }
}

class Cookies {
    String n;
    int a;
    int b;

    public Cookies(String n, int a, int b) {
      this.n = n;
      this.a = a;
      this.b = b;
    }

    public String getName() {
        return n;
    }

    public String toString() {
        return n+", " + a + ", " + b;
    }
}