假设我有这段代码:
for(int i = 0; i < accounts.size(); i++) {
if(UserID.equals(accounts.get(i).getUserID())) {
if(accounts.contains(accounts.get(i))) {
if(UserPass.equals(accounts.get(i).getPassword())) {
System.out.println("True");
}
} else {
typePhrase("unrecognised userID: '" + UserID + "'");
}
} else {
typePhrase("unrecognised userID: '" + UserID + "'");
}
}
它遍历一个充满对象的数组列表,这些对象有一个 ID 和一个密码。我从用户那里得到两个输入,一个是用户 ID,另一个是密码。我想要的是让它遍历保存在该 arrayList 中的每个可能的对象,如果找到匹配项,将 true
打印到控制台,我遇到的问题是,如果你输入错误的内容,它会打印一条消息,指出 arrayList 中的每个对象都无法识别。如果您在右侧键入一个,它还会为 arrayList -1 中存在的每个对象打印消息。你建议我做什么?
用户类:
public class User {
String userID;
String password;
public User(String ID, String Pass) {
userID = ID;
password = Pass;
}
public String getUserID() {
return userID;
}
public String getPassword() {
return password;
}
}
编辑:
ArrayList<User> accounts = new ArrayList<User>();
最佳答案
你应该在 User 类中实现 equals 方法:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
if (!getUserID().equals(user.getUserID())) return false;
return getPassword().equals(user.getPassword());
}
然后您可以使用键入的信息创建一个新用户,并检查列表是否包含此用户:
User user = new User("typedUserId", "typedPassword");
System.out.println(accounts.contains(user));
关于java - 在 java 中处理 ArrayList 中的相等性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38626503/