在循环中声明对象时,如何知道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;
}
}
答案 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 );
}
当然,您可以比较所需的所有属性。