如何搜索对象的ArrayList

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何搜索对象的ArrayList相关的知识,希望对你有一定的参考价值。

我正在创建一个Accounts(一个对象)的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
}
答案

我建议你通过为帐户类实现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 ;
}

然后使用contains方法

另一答案

首先在accNum模型中为Account添加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模型中声明的吸气剂(如下所示)

然后检查一下

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;
}
}
另一答案

对于Java ArrayListcontains执行对象相等比较。要使用.contains,你需要

  1. 为Account类实现.equals()方法,并让它仅根据输入this.myAccountNum的帐号检查Account属性。
  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类型,使用指数可能非常差。 Ways to iterate over a list in Java

以上是关于如何搜索对象的ArrayList的主要内容,如果未能解决你的问题,请参考以下文章

java ArrayList 如何读取文件中的数据,并且搜索

如何使用 contains 在自定义对象 ArrayList 中搜索特定字符串?

如何比较 ArrayList 中的对象属性?

在 ArrayList 中搜索对象

如何在 BottomNavigationView 的片段上打开搜索界面?

在 Arraylist 的 listview 的 listitem 上显示值