[英]How do I search an ArrayList of Objects
我正在創建Account
的ArrayList(一個對象),並且Account
構造函數是
public Account(String name, int accNum, int balance)
{
myName = name;
myAccountNum = accNum;
myBalance = balance;
}
我想知道如何檢查ArrayList以確定給定的accountNumber是否存在,如果存在,則return true
private static ArrayList<Account> accounts = new ArrayList<Account>();
我最初的想法是這樣,但我認為這沒有用
if(accounts.contains(tempAccNum))
{
//executes code that I have
}
對於Java ArrayList , contains
執行對象相等性比較。 要使用.contains
,您需要
.equals()
方法,並使其僅根據輸入Account
的帳號檢查this.myAccountNum
屬性。 Account
,以傳遞到contains
。 更好的方法是評估迭代器,並在每個步驟檢查帳號。 在這里,我假設myAccountNum
是Account
類的公共屬性。
Iterator<E> it = Accounts.iterator();
while (it.hasNext()) {
Account acc = it.next();
if(acc.myAccountNum == tempAccNum)
return true;
}
特別是對於ArrayList
,將.get
與索引配合使用還不錯:
for(int index = 0; index < Accounts.size(); ++index) {
if(Accounts.get(index).myAccountNum == tempAccNum)
return true;
對於其他List
類型,使用索引可能會很糟糕。
遍歷Java中的列表的方法
我建議您僅通過為帳戶類實現equals()
方法來使其簡單。
@Override
public boolean equals(Object o){
if(o==null)return false;
if(o.getClass()!=this.getClass())return false;
Account demo = (Account)o;
if(!demo.myName.equals(this.myName))return false;
if(demo.myAccountNum != this.myAccountNum)return false ;
if(demo.myBalance = this.myBalance)return false ;
}
然后使用包含方法
首先在Account
模型中為accNum
添加getter
然后試試這個
public boolean containsAcc(int accno) {
for(int i=0;i<accounts.size();i++) {
if(accounts!= null && accounts.get(i).getMyAccountNum()==acno) {
return true;
}
}
return false;
}
這里的getMyAccountNum()
是在Account
模型中聲明的getter(如下所示)
然后檢查一下
if(containsAcc(tempAccNum))
{
//your code
}
您的帳戶模型應如下所示
public class Account {
String myName;
int myAccountNum;
int myBalance;
public Account(String name, int accNum, int balance)
{
this.myName = name;
this.myAccountNum = accNum;
this.myBalance = balance;
}
public int getMyAccountNum() {
return myAccountNum;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.