Java ArrayList,循环中包含对象

时间:2012-11-02 21:30:37

标签: java arraylist

在循环中声明对象时,如何知道ArrayList中对象的名称? 我可以通过索引获取它,但我不知道它的名称来查找/知道它是否在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;
    }
}

2 个答案:

答案 0 :(得分:7)

要在List中查找用户类,必须覆盖类UserClasss中的equals和hash代码方法。

通过这样做,contains()和indexOf()方法将能够在Collection中找到它们。

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

要添加的代码(由eclipse生成):

@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 :(得分:1)

您可以使用contains()和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 );
}

当然,您可以比较所需的所有属性。