If you need to iterate over the entire card to find an Account with a specific number, you defeat the purpose of using the Card.
Perhaps you should have two Maps. An additional card will be HashMap<Integer,Account> and will allow you to find Account by account number in a constant time.
This will allow you to get rid of the loop (because as soon as you have an Account for a given account number, one map.get(account) will get you the corresponding value. This will allow you to delete and add entries from / to the existing TreeMap , which you cannot do iterations over the recordset (well, you could do the deletion using an explicit iterator over the recordset, but not insert).
BTW, if your TreeMap compareTo does not use the account balance to determine the order, you do not need to delete the record from TreeMap and re-add it with the updated balance.
source share