簡體   English   中英

如何搜索對象的ArrayList

[英]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 ArrayListcontains執行對象相等性比較。 要使用.contains ,您需要

  1. 實現Account類的.equals()方法,並使其僅根據輸入Account的帳號檢查this.myAccountNum屬性。
  2. 使用所需的帳號創建一個虛擬Account ,以傳遞到contains

更好的方法是評估迭代器,並在每個步驟檢查帳號。 在這里,我假設myAccountNumAccount類的公共屬性。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM