当在循环中声明时,如何知道 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;
}
}
最佳答案
要在列表中找到您的用户类,您必须覆盖 UserClasss
类中的 equals 和 hash code 方法。
通过这样做,contains() 和 indexOf() 方法将能够在 Collection
中找到它们。
附言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;
}
关于带有循环对象的Java ArrayList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13203305/