2015-12-26 10 views
5

Ho una treemap che è ordinata da un compareTo nella classe Account.come mantenere una treemap ordinata dopo aver aggiunto i valori-chiave

Quando avvio la mappa dei tre, questa viene ordinata ma quando cerco di utilizzare questa funzione (per aggiungere denaro a un account specifico), funziona solo se i valori che cambio non sono il primo o l'ultimo nella treemap.

Ecco il codice. Che cosa sto facendo di sbagliato?

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

risposta

2

Se si deve iterare su tutta la mappa per trovare un account con un numero specifico, sconfiggere lo scopo di utilizzare una mappa.

Forse dovresti avere due mappe. La mappa aggiuntiva sarà HashMap<Integer,Account> e consentirà di individuare un numero di conto Account in tempo costante.

Questo ti permetterà di sbarazzarti del ciclo (dal momento che una volta che hai il numero di conto indicato, il numero map.get(account) ti darà il valore corrispondente. Ciò ti consentirà di rimuovere e aggiungere voci da/a esistente TreeMap, che non si può fare mentre l'iterazione di ingresso del set (beh, si potrebbe fare di asportazione mediante un iteratore esplicito il set di ingresso, ma non di inserimento).

BTW, a meno che l' compareTo tuoi TreeMap utilizza il saldo del conto per determinare l'ordine, non è necessario rimuovere la voce dalla TreeMap e riaggiungerla con il saldo aggiornato

+0

prima di tutto, grazie per la risposta. Sto utilizzando il saldo del conto per determinare l'ordine, quindi ho pensato di dover rimuovere e aggiungere di nuovo. E come dovrei implementare questa nuova mappa? all'interno della funzione? – KLTR

+0

@RoyLevy Sì, è necessario rimuovere e aggiungere nuovamente. Per quanto riguarda la nuova mappa, non sarebbe efficiente se la si crea ogni volta che viene chiamato il metodo. Dovresti considerare di passarlo come secondo argomento al tuo metodo. – Eran

+0

ma come faccio ad usare la nuova hashmap per aggiungere i valori? Capisco che posso ottenere da o (1) con ottenere account, ma come aggiungo il valore da hashmap (dal momento che la chiave è un intege) scusa im uno studente, forse mi chiedo alcune domande stupide :) – KLTR

Problemi correlati