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;
}
}