通过包含在对象实例中的变量而不是数组编号来搜索数组?

时间:2013-03-25 17:58:37

标签: java

我正在为一家名为“客户”的公司创建一系列客户帐户。我有一个名为getGasAccount的方法,它将计算数组中的帐户数。

我在程序类中将变量声明为:

final int MAXACCOUNTS = 10;
int intNUmber, intSelectAccount;

我使用以下方式设置帐户:

if (GasAccount.getGasAccount() < MAXACCOUNTS) {
   intSelectAccount = GasAccount.getBankAccount()++;
   customers[intSelectAccount] = new GasAccount();
}

我希望能够通过他们的帐号搜索客户,该帐号是在调用构造函数时手动输入的。我不想通过intSelectAcocunt /数组引用进行搜索。

如果我有一个名为displayAccountDetails的方法,是否有其他方法可以找到帐户而不是使用:

customers[intSelectAccount].displayAccountDetails();

2 个答案:

答案 0 :(得分:1)

equals中实施GasAccount方法

public boolean equals(Object objToCompare){
    if (objToCompare != null){
        return objToCompare instanceof GasAccount && ((GasAccount)objToCompare).getAccountNumber() == getAccountNumber();
    }else{
        return false;
    }
}

现在找到数组中GasAccount对象的位置并显示帐户详细信息:

java.util.List<GasAccount> gasAccountsList = (java.util.List<GasAccount>)java.util.Arrays.asList(customers);
int objectIndex = gasAccountsList.indexOf([Gas Account Object]);
if (objectIndex != -1){
    gasAccountsList.get(objectIndex).displayAccountDetails();
}

jahroy 建议按帐号搜索的另一种简单方法是:

public void getAccountDetails(int accountNumber){
    java.util.List<GasAccount> gasAccountsList = (java.util.List<GasAccount>)java.util.Arrays.asList(customers);
    for(GasAccount gasAccountObj : gasAccountsList){
        if(gasAccountObj.getAccountNumber() == accountNumber){
            gasAccountObj.displayAccountDetails();
            break;
        }
    }
}

OR

public void getAccountDetails(int accountNumber){
    for(GasAccount gasAccountObj : customers){
        if(gasAccountObj.getAccountNumber() == accountNumber){
            gasAccountObj.displayAccountDetails();
            break;
        }
    }
}

答案 1 :(得分:0)

您想要的数据结构是HashMap。你可以这样做。

public class AccountClass{

    //You can fill in the details. I sounds like you know about constructors
    //getters, setters, etc.

    private HashMap<String, String> accountHash = new HashMap<String, String>();

    public HashMap<String, String> getHashMap()
    {
        return this.accountHash;
    }
}

当您想按帐号查找帐户时,您可以执行以下操作。

AccountClass acct = new AccountClass();
acct.getHashMap().get("1234");

假设您实际在地图中放置了帐号为“1234”的条目,则会返回与该密钥相关联的值。

Here是维基百科的文章,如果你想做更多的阅读。

编辑:根据一些评论,我还要添加一些内容。

如果你像这样使用HashMap静态

可能会更好
private static HashMap<String, String> accountHash = new HashMap<String, String>();

当您声明变量static时,这使得您不必实例化对象来访问HashMap。你可以做这样的事情。

AccountClass.accountHash.get(); 

或     AccountClass.accountHash.put();

如果要向HashMap添加内容,则需要使用put方法。这是一个例子。

accountHash.put("1234","My test account"). 

现在当你使用它时,     accountHash.get(“1234”); //您将获得我的测试帐户

您将获得与“1234”键相关联的值。

请记住,此示例只是为了让您了解如何使用它。您可以拥有,或其他任何您想要的地图。