添加键值后如何保持树状图排序
how to keep a treemap sorted after adding key-values
我有一个树状图,它按 compareTo
在 Account
class 中排序。
当我启动树状图时,它已排序,但当我尝试使用此功能(向特定帐户添加资金)时,它仅在我更改的值不是树状图中的第一个或最后一个时才有效。
这是代码。我做错了什么?
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;
}
}
}
如果您必须遍历整个地图才能找到具有特定编号的帐户,那么您就失去了使用地图的目的。
也许你应该有两张地图。附加地图将是一个HashMap<Integer,Account>
,可以让您在恒定时间内通过帐号找到一个Account
。
这将允许您摆脱循环(因为一旦您拥有给定帐号的 Account
,单个 map.get(account)
将为您提供相应的值。这将允许您删除和添加条目 from/to 现有的 TreeMap
,这是在遍历条目集时不能执行的操作(好吧,您可以使用显式迭代器对条目集进行删除,但不能插入) .
顺便说一句,除非您的 TreeMap
的 compareTo
使用帐户余额来确定排序,否则您不必从 TreeMap 中删除条目并使用更新后的条目重新添加余额。
我有一个树状图,它按 compareTo
在 Account
class 中排序。
当我启动树状图时,它已排序,但当我尝试使用此功能(向特定帐户添加资金)时,它仅在我更改的值不是树状图中的第一个或最后一个时才有效。
这是代码。我做错了什么?
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;
}
}
}
如果您必须遍历整个地图才能找到具有特定编号的帐户,那么您就失去了使用地图的目的。
也许你应该有两张地图。附加地图将是一个HashMap<Integer,Account>
,可以让您在恒定时间内通过帐号找到一个Account
。
这将允许您摆脱循环(因为一旦您拥有给定帐号的 Account
,单个 map.get(account)
将为您提供相应的值。这将允许您删除和添加条目 from/to 现有的 TreeMap
,这是在遍历条目集时不能执行的操作(好吧,您可以使用显式迭代器对条目集进行删除,但不能插入) .
顺便说一句,除非您的 TreeMap
的 compareTo
使用帐户余额来确定排序,否则您不必从 TreeMap 中删除条目并使用更新后的条目重新添加余额。