在Java中查找具有唯一值的数据成员的对象?

在Java中查找具有唯一值的数据成员的对象?,java,Java,我正在做一个Java任务,就像一个简单的银行系统,有客户对象和储蓄账户。我将所有客户对象存储在arraylist中,我还计划对SavingsAccount对象执行相同的操作,但这可能不是必需的。每个SavingsAccount都有一个名为accountNumber的数据成员,该成员是唯一的 SavingsAccount还包括accountBalance之类的数据成员。所以我的问题是,如何获得accountNumber等于“1002”的SavingsAccount(出于某种原因,我将它们作为字符串

我正在做一个Java任务,就像一个简单的银行系统,有客户对象和储蓄账户。我将所有客户对象存储在arraylist中,我还计划对SavingsAccount对象执行相同的操作,但这可能不是必需的。每个SavingsAccount都有一个名为accountNumber的数据成员,该成员是唯一的

SavingsAccount还包括accountBalance之类的数据成员。所以我的问题是,如何获得accountNumber等于“1002”的SavingsAccount(出于某种原因,我将它们作为字符串),然后能够从数据成员设置或获取值,比如accountBalance和setAccountBalance?帮助是宝贵的!谢谢

我创建帐户对象

SavingsAccount account = new SavingsAccount(inAccount);
类SavingsAccount:

class SavingsAccount {

// data members
private String accountType;
private String accountNumber;
private double accountInterestRate;
private int accountBalance;

// constructor
public SavingsAccount(String inNumber){
    accountType = "Saving";
    accountNumber = inNumber;
    accountInterestRate = 0.5;
    accountBalance = 0;
}

// get account number
public String getAccountNumber() {
    return accountNumber;
}

// get account balance
public int getAccountBalance() {
    return accountBalance;
}

// get interest rate
public double getAccountInterestRate(){
    return accountInterestRate;
}

    // set new value to balance
    public void setAccountBalance(int inMoney){
    accountBalance = accountBalance + inMoney;
    }

}
编辑:


因为我在学习Java,所以我更喜欢现在使用不太复杂的解决方案。我知道如何使用arraylist,但我还没有接触到hashmap,我希望现在有一个更简单但可能不是最好的解决方案?有没有一种方法可以访问对象而不必在arraylist或hashmap中“收集”它们?

我建议您将帐户存储在
arraylist
中,而不是存储在
hashmap

创建帐户后立即将其放入地图:

SavingsAccount account = new SavingsAccount(inAccount);
accountMap.put(inAccount, account);
然后,您可以通过执行以下操作轻松有效地获得帐户

accountMap.get(accountNumber);

为了确保由某个帐号映射的帐户始终确实具有该帐号,我建议您将
accountNumber
final:

...
private final String accountNumber;
...

我会把它们放在地图上,就像

final Map<String, SavingsAccount> accounts = new LinkedHashMap<String, SavingsAccount>();

// get an account.
SavingsAccount account = accounts.get(accountKey);

// add an account
accounts.put(accountKey, account);
final Map accounts=new LinkedHashMap();
//获得一个帐户。
savingsaccountaccount=accounts.get(accountKey);
//添加帐户
accounts.put(accountKey,account);

按帐号进行哈希运算是在固定时间内获取储蓄账户的有效方法。删除ArrayList并使用HashMap

HashMap<String, SavingsAccount> map = new HashMap<String, SavingsAccount>();
SavingsAccount account = new SavingsAccount(inNumber);
map.put(inNumber, account);

不能使用“==”运算符检查字符串。改为使用equals()或equalsIgnoreCase()。没错,我编辑了问题OK,但对象必须在HashMap中吗?难道他们不能“免费”并且只选择其中的一个吗?为了能够找到一个你需要的地方去寻找它。如果它们只是漂浮在水面上,你真的无法在任何地方找到它。但是,您可以将
HashMap
作为
SavingsAccount
类的静态成员,将
this
添加到
SavingsAccount
构造函数中的映射中,并创建如下静态方法:
public static getSavingsAccount(String num){return map.get(num);}
。我建议您考虑使用工厂模式,并且总是向帐户对象询问<代码> SavingsAccount <代码>。(这将允许您避免使用相同的num创建两个account对象。)
SavingsAccount account = map.get(inNumber);