如何在添加键值后对树图进行排序

时间:2015-12-26 10:14:58

标签: java sorting treemap

我有一个树形图,按照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;
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

如果您必须遍历整个地图以查找具有特定号码的帐户,则无法使用地图。

也许你应该有两张地图。附加地图为HashMap<Integer,Account>,可让您在固定时间内按帐号找到Account

这将允许您摆脱循环(因为一旦您拥有给定帐号的Account,单个map.get(account)将获得相应的值。这将允许您删除并从现有的TreeMap添加条目,这是在迭代条目集时无法做到的(好吧,您可以使用条目集上的显式迭代器进行删除,但不能插入)。

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