2015-12-26 18 views
5

ben Account sınıfta bir compareTo göre sıralanır bir treemap sahip ekledikten sonra sıralanan bir treemap tutmak nasıl.anahtar değerlerini

Treemap'ı başlattığımda, sıralanır ancak bu işlevi (belirli bir hesaba para eklemek için) kullanmayı denediğimde, yalnızca değiştirdiğim değerler treemap'teki ilk veya sonuncu değilse çalışır.

İşte kod. Neyi yanlış yapıyorum? Belirli bir sayı ile bir Hesap bulmak için tüm harita üzerinde yineleme yapmak varsa

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

cevap

2

, bir harita kullanarak amacına ulaşmamasına.

Belki de iki tane Haritalar uygulamanız gerekir. Ek harita bir HashMap<Integer,Account> olacaktır ve bir Account hesap numarasını sabit zamanda sabitlemenizi sağlayacaktır.

Bu, döngüden kurtulmanızı sağlayacaktır (bir kez verilen hesap numarası için Account'a sahip olduğunuzdan, tek bir map.get(account) size karşılık gelen değeri alacaktır. (iyi, yerleştirme giriş kümesi üzerinden açık bir yineleyici kullanarak kaldırma, ama could not) giriş kümesi üzerinden yineleme yaparken yapamaz TreeMap mevcut.

BTW, sizin TreeMap 'ın compareTo kullandığı sürece siparişi belirlemek için hesap bakiyesi, TreeMap'ten girişi kaldırmak ve güncellenmiş bakiye ile yeniden eklemek zorunda kalmazsınız

+0

her şeyden önce, yanıtı kaldırmak için hesap bakiyesini kullanarak siparişi belirlediğiniz için teşekkür ederim. Tekrar kaldırmam ve tekrar eklemem gerektiğini düşündüm. Bu yeni haritayı nasıl uygulamalıyım? fonksiyonun içinde? – KLTR

+0

@RoyLevy Evet, kaldırmanız ve tekrar eklemeniz gerekiyor. Yeni Harita ile ilgili olarak, yöntem her çağrıldığında oluşturursanız verimli olmaz. Yönteminize ikinci bir argüman olarak geçmeyi düşünmelisiniz. – Eran

+0

ancak değerleri eklemek için yeni hashmap'ı nasıl kullanırım? Anladığım kadarıyla (1) hesabı alabilirim, ama hashmap değerini nasıl eklediğimi (anahtarlar bir intege olduğundan) özür dilerim im bir öğrenci belki aptalca sorular sorabilirim :) – KLTR

İlgili konular