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() メソッドは .xml 内でそれらを見つけることができます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 に答える