繁体   English   中英

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

[英]how to keep a treemap sorted after adding key-values

我有一个树图,它按Account类中的compareTo排序。

当我启动树形图时,它会被排序,但是当我尝试使用此功能(为特定帐户添加资金)时,仅当我更改的值不是树形图中的第一个或最后一个时,它才有效。

这是代码。 我究竟做错了什么?

 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;
            }
        }
    }

如果您必须遍历整个Map以查找具有特定编号的帐户,那么您将无法使用Map。

也许你应该有两张地图。 附加地图将是HashMap<Integer,Account> ,并允许您按固定时间按帐号查找Account

这将让你摆脱循环的(因为一旦你的Account的指定帐户数量,单个map.get(account) ,会得到相应的价值。这将允许您删除和/添加条目现有的TreeMap ,在迭代条目集时你不能做(好吧,你可以在条目集上使用显式迭代器进行删除,但不能插入)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM