1

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

2 回答 2

7

要在 List 中找到您的用户类,您必须覆盖类中的 equals 和 hash code 方法UserClasss

通过这样做, contains() 和 indexOf() 方法将能够在Collection.

PS 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;
    }
于 2012-11-02T21:33:31.960 回答
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 );
}

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

于 2012-11-02T21:36:20.027 回答