2012-11-02 86 views
1

如何在循環中聲明ArrayList時知道對象的名稱? 我可以通過索引得到它,但我不知道它的名稱是要找到/知道它是否在ArrayList帶有循環中對象的Java ArrayList

import java.util.ArrayList; 

public class Teste { 

    public static void main(String[] args) { 
     ArrayList<UserClasss> userList = new ArrayList<UserClasss>(); 

     for (int i = 0; i < 5; i++) { 
      UserClasss user = new UserClasss(); 
      user.setName("name"+i); 
      user.setAge((int)(Math.random()*80)); 
      userList.add(user); 
     } 
     for (UserClasss forUser:userList){ 
      System.out.println(forUser.getName()); 
      System.out.println(forUser.getAge()); 
     } 


     //how can i know if contains it here? 
     //userList.contains(user); 
     //and how do i know the index of it? 
     //userList.indexOf(user); 


    } 
} 

class UserClasss { 

    private String name; 
    private int age; 

    public void setName(String s){ 
     name = s; 
    } 
    public String getName(){ 
     return name; 
    } 
    public void setAge(int i){ 
     age = i; 
    } 
    public int getAge(){ 
     return age; 
    } 
} 

回答

6

要在List中查找您的用戶類,您必須重寫類UserClasss中的equals和hash代碼方法。

通過這樣做,contains()和indexOf()方法將能夠在Collection中找到它們。

P.S. eclipse和其他一些IDE可以爲你生成這些方法。

代碼中添加(通過日食產生):

@Override 
    public int hashCode() { 
     final int prime = 31; 
     int result = 1; 
     result = prime * result + age; 
     result = prime * result + ((name == null) ? 0 : name.hashCode()); 
     return result; 
    } 
    @Override 
    public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (obj == null) 
      return false; 
     if (getClass() != obj.getClass()) 
      return false; 
     UserClasss other = (UserClasss) obj; 
     if (age != other.age) 
      return false; 
     if (name == null) { 
      if (other.name != null) 
       return false; 
     } else if (!name.equals(other.name)) 
      return false; 
     return true; 
    } 
1

可以使用含有()和的indexOf(),但你的UserClass的應該有一個equals()方法

public boolean equals(Object obj) 

返回如果obj等於它自己,則爲true。在你的情況下,你應該比較名字。

public boolean equals(Object obj) { 
    if (! (obj instanceof UserClass) { 
     return false; 
    } 
    return this.name.equals((UserClass)obj).name); 
} 

當然,你可以比較你想要的所有屬性。

+2

重寫'hashCode()'和'equals()'總是好的,而不僅僅是一個 – Sujay