添加键值后如何保持树状图排序

how to keep a treemap sorted after adding key-values

我有一个树状图,它按 compareToAccount 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,这是在遍历条目集时不能执行的操作(好吧,您可以使用显式迭代器对条目集进行删除,但不能插入) .

顺便说一句,除非您的 TreeMapcompareTo 使用帐户余额来确定排序,否则您不必从 TreeMap 中删除条目并使用更新后的条目重新添加余额。