2015-11-20 85 views
3

我有这个链表:的Java LinkedList的搜索

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

如何将我的“名称2”做搜索和输出:

Name2, 3, 1 
Name2, 4, 2 

我已经做到了这一点,但它返回false /未找到

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

如果Cookies是用户定义的类,是否为该类创建了比较器?它返回false的原因是因为你已经创建了一个完全独立的对象。尽管新对象包含相同的数据,但它与列表中的对象不是同一个对象。这就像说两个具有相同品质(形状,大小,颜色)的苹果是同一个苹果。 – Taelsin

+0

[Java List.contains(字段值等于x的对象)]的可能重复](http://stackoverflow.com/questions/18852059/java-list-containsobject-with-field-value-equal-to-x) – Adrian

回答

0

如果这是你开始学习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; 
    } 
} 
2

您需要实现在Cookies类的equals方法,以便linkList.contains作品如您所愿

class Cookie{ 
    @Override 
    boolean equals(Object cookie){ 
    .. 
    } 
} 

否则Object.equals将被称为该检查引用相等,这意味着

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

总是假

0

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

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