簡體   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