Java 如何在添加键值后对树映射进行排序
我有一个树状图,它在Java 如何在添加键值后对树映射进行排序,java,sorting,treemap,Java,Sorting,Treemap,我有一个树状图,它在科目类中按比较器排序到 当我初始化树状图时,它会被排序,但当我尝试使用此函数(向特定帐户添加资金)时,它仅在我更改的值不是树状图中的第一个或最后一个值时才起作用 这是代码。我做错了什么 public static void deposit(TreeMap<Account,MyLinkedList<Customer>> map){ boolean flag = false; int num ;
科目
类中按比较器排序到
当我初始化树状图时,它会被排序,但当我尝试使用此函数(向特定帐户添加资金)时,它仅在我更改的值不是树状图中的第一个或最后一个值时才起作用
这是代码。我做错了什么
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;
}
}
}
公共静态无效存款(树状地图){
布尔标志=假;
int-num;
整数金额;
System.out.println(“请输入账号”);
num=s.nextInt();
//for(迭代器i=map.;i.hasNext())
对于(Map.Entry:Map.entrySet()){
if(entry.getKey().getAccNumber()==num){
flag=true;
System.out.println(“请输入金额”);
金额=s.nextInt();
entry.getKey().setAccBalance(entry.getKey().getAccBalance()+金额);
帐户温度=entry.getKey();
MyLinkedList tempList=entry.getValue();
map.remove(entry.getKey());
地图放置(临时,圣堂武士);
打破
}
}
如果(标志==false){
System.out.println(“帐户不存在”);
返回;
}
}
}
如果您必须遍历整个地图才能找到具有特定编号的帐户,则无法使用地图
也许你应该有两张地图。附加映射将是一个HashMap
,并允许您在固定时间内按帐号定位一个帐户
这将允许您摆脱循环(因为一旦您拥有给定帐号的帐户
,一个映射。get(Account)
将为您获得相应的值。这将允许您从现有树映射
中删除和添加条目,这是迭代条目集时无法执行的(好的,您可以在条目集上使用显式迭代器进行删除,但不能插入)
顺便说一句,除非您的TreeMap
的compareTo
使用帐户余额来确定订单,否则您不必从TreeMap中删除条目并使用更新的余额重新添加它。首先,感谢您的回复。我使用帐户余额来确定订单,因此我认为我必须删除并再次添加。a我应该如何实现这个新的地图?在函数里面?@ ReavyVy是的,你必须删除和添加。对于新的地图,如果每次调用该方法,它就不那么有效。你应该考虑把它作为第二个参数传递给你的方法。但是我如何使用新的哈希表来添加这些值?我明白我的意思。使用get account可以通过o(1)得到它,但是我如何从hashmap中添加值(因为它们的键是整数)对不起,我是一个学生,也许我会问一些愚蠢的问题:)@RoyLevy假设你将你的方法传递到TreeMap map
和hashmap acctMap
account acct=acctMap.get(num)
将为您提供与账号num
匹配的帐户,假设该帐户存在。然后map.get(acct)
将为您提供该帐户的MyLinkedList
值。现在您可以删除旧条目,修改密钥并重新添加修改的条目。