我有一个树形图,按照compareTo
类中的Account
排序。
当我启动树形图时,它会被排序,但是当我尝试使用此功能(为特定帐户添加资金)时,仅当我更改的值不是树形图中的第一个或最后一个时,它才有效。
这是代码。我做错了什么?
public static void deposit(TreeMap<Account,MyLinkedList<Customer>> map){
boolean flag = false;
int num ;
int amount;
System.out.println("please enter account number");
num = s.nextInt();
//for(Iterator<Account> i = map.;i.hasNext())
for(Map.Entry<Account, MyLinkedList <Customer>> entry : map.entrySet()){
if(entry.getKey().getAccNumber() == num){
flag = true;
System.out.println("Please enter amount");
amount = s.nextInt();
entry.getKey().setAccBalance(entry.getKey().getAccBalance()+amount);
Account temp = entry.getKey();
MyLinkedList<Customer> tempList = entry.getValue();
map.remove(entry.getKey());
map.put(temp, tempList);
break;
}
}
if(flag == false) {
System.out.println("Account doesn't exist");
return;
}
}
}
答案 0 :(得分:2)
如果您必须遍历整个地图以查找具有特定号码的帐户,则无法使用地图。
也许你应该有两张地图。附加地图为HashMap<Integer,Account>
,可让您在固定时间内按帐号找到Account
。
这将允许您摆脱循环(因为一旦您拥有给定帐号的Account
,单个map.get(account)
将获得相应的值。这将允许您删除并从现有的TreeMap
添加条目,这是在迭代条目集时无法做到的(好吧,您可以使用条目集上的显式迭代器进行删除,但不能插入)。
顺便说一句,除非您的TreeMap
compareTo
使用帐户余额来确定排序,否则您不必从TreeMap中删除该条目并使用更新的余额重新添加该条目。