2015-12-26 24 views
5

जोड़ने के बाद सॉर्ट किए गए ट्रेमैप को कैसे रखा जाए, मेरे पास 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; 
      } 
     } 
    } 

उत्तर

2

आप एक विशिष्ट संख्या के साथ एक खाता खोजने के लिए पूरे नक्शे से अधिक पुनरावृति करने के लिए है, तो आप एक मानचित्र का उपयोग कर का उद्देश्य विफल।

शायद आपके पास दो मानचित्र होना चाहिए। अतिरिक्त मानचित्र HashMap<Integer,Account> होगा और आपको लगातार समय पर खाता संख्या द्वारा Account का पता लगाने देगा।

यह आपको लूप से छुटकारा पाने के लिए (एक बार के बाद से आप दिए गए खाता नंबर Account, एक भी map.get(account) आप संबंधित मान मिल जाएगा है। यह आपको हटाने और से/करने के लिए प्रविष्टियों को जोड़ने के लिए अनुमति देगा की अनुमति देगा मौजूदा TreeMap, जो आप (अच्छी तरह से, आप हटाने प्रविष्टि सेट पर एक स्पष्ट इटरेटर का उपयोग कर सकता है, लेकिन नहीं प्रविष्टि) प्रविष्टि सेट पर पुनरावृत्ति जबकि ऐसा नहीं कर सकते।

Btw, जब तक कि आपके TreeMap के compareTo का उपयोग करता है आदेश निर्धारित करने के लिए खाता शेष राशि, आपको ट्रीमैप से प्रविष्टि को हटाने की आवश्यकता नहीं है और इसे अद्यतन शेष राशि के साथ दोबारा जोड़ना है।

+0

सबसे पहले, उत्तर के लिए धन्यवाद। मैं आदेश निर्धारित करने के लिए खाता शेष राशि का उपयोग कर रहा हूं, इसलिए मैंने सोचा कि मुझे फिर से हटाना होगा और जोड़ना होगा। और मुझे इस नए मानचित्र को कैसे लागू करना चाहिए? समारोह के अंदर? – KLTR

+0

@RoyLevy हां, आपको फिर से निकालना और जोड़ना होगा। नए मानचित्र के बारे में, यदि आप इसे हर बार विधि कहलाते हैं तो यह कुशल नहीं होगा। आपको इसे अपनी विधि के लिए दूसरे तर्क के रूप में पारित करने पर विचार करना चाहिए। – Eran

+0

लेकिन मूल्य जोड़ने के लिए मैं नए हैशपैप का उपयोग कैसे करूं? मैं समझता हूं कि मैं इसे प्राप्त करने के साथ ओ (1) द्वारा प्राप्त कर सकता हूं, लेकिन मैं हैशपैप से मूल्य कैसे जोड़ता हूं (क्योंकि वे कुंजी एक पूर्णांक है) माफ करना मैं एक छात्र हूं, शायद मैं कुछ मूर्ख सवाल पूछूं :) – KLTR