2013-02-12 22 views
18

में सबसे बड़ी संख्या पाएं मैं हैशसेट और हैश मैप में सबसे बड़ी संख्या ढूंढना चाहता हूं। मान लें कि मेरे पास हैशसेट में [22,6763,32,42,33] नंबर है और मैं अपने वर्तमान हैशसेट में सबसे बड़ी संख्या खोजना चाहता हूं..मैं यह कैसे करूँगा? और हैश मैप के लिए भी वही बात है। मुझे उम्मीद है कि आप इसके साथ मेरी मदद कर सकते हैं। धन्यवाद।हैशसेट/हैश मैप जावा

+4

आप ऐसा करने की जरूरत है, तो आप शायद एक हैश आधारित संग्रह का उपयोग नहीं किया जाना चाहिए। –

उत्तर

54

आप किसी भी संग्रह से अधिकतम तत्व खोजने के लिए Collections.max(Collection) का उपयोग कर सकते हैं। इसी तरह, HashMap के लिए, आप उसी विधि का उपयोग अपने keySet() या values() पर कर सकते हैं, इस पर निर्भर करता है कि आप अधिकतम कुंजी या अधिकतम मान चाहते हैं या नहीं।

इसके अलावा, अगर आप इस तरह के रूप में चाहते हैं, तो आप एक TreeSet और TreeMap बजाय उपयोग कर सकते हैं, कि क्रमबद्ध कुंजी क्रम में तत्वों संग्रहीत करता है।

+2

+1 छोटा और सटीक –

+0

वाह .. धन्यवाद .. यह बहुत मदद करता है। :) – user2064467

+0

@ user2064467। आपका स्वागत है :) –

6

आप एक HashSet/HashMap उपयोग करने के लिए मजबूर किया जाता है, तो आप अधिकतम खोजने के लिए पूरे HashSet/HashMap स्कैन करने के लिए है। Collections.max() जैसे लाइब्रेरी फ़ंक्शन इस तरह करेंगे।

आप अधिकतम की O(1) पुनः प्राप्ति चाहते हैं, और आप संग्रह का प्रकार बदलने के लिए इस्तेमाल किया जा रहा है, एक क्रमबद्ध सेट/नक्शा (जैसे TreeSet/TreeMap) का उपयोग की अनुमति दी जाती है।

+0

ओ (1) केवल नक्शा कुंजी पर काम करता है; मूल्यों के लिए एक अलग संग्रह का निर्माण पहले किया जाना चाहिए, इसलिए यह ओ (एन) फिर से, एक बहुत ही खराब स्थिर कारक के साथ है। –

+0

यह भी ध्यान रखें कि ट्रीसेट को सम्मिलन और हटाने के लिए महंगा हो जाता है। तो बुद्धिमानी से सही कार्यान्वयन का चयन करें –

2

कुछ इस तरह:

Set<Integer> values = new HashSet<Integer>() {{ 
    add(22); 
    add(6763); 
    add(32); 
    add(42); 
    add(33); 
}}; 
int maxValue = Integer.MIN_VALUE; 
for (int value : values) { 
    if (value > maxValue) { 
     maxValue = value; 
    } 
} 

और यह:

Map<String, Integer> values = new HashMap<String, Integer>() {{ 
    put("0", 22); 
    put("1", 6763); 
    put("2", 32); 
    put("3", 42); 
    put("4", 33); 
}}; 
int maxValue = Integer.MIN_VALUE; 
for (int value : values.values()) { 
    if (value > maxValue) { 
     maxValue = value; 
    } 
} 
+0

केवल उस सरल उद्देश्य के लिए हैश मैप को प्रारंभ करने का भयानक तरीका एक नई कक्षा बनाई जानी चाहिए। जब भी मैं इसे कोड में देखता हूं, मैं इसे हर बार नफरत करता हूं। – Kamil

+1

इतना भयानक क्या है? मुझे इसमें कोई नुकसान नहीं दिखता है। – duffymo

+0

मैंने जो लिखा है, वह कुछ तत्वों के साथ मानचित्र बनाने के उद्देश्य से नई कक्षा बनाता है। यह बहुत धीमा है (स्टैक ओवरफ्लो पर इसके परीक्षण हैं)। – Kamil

7

कोशिश

int max = Collections.max(set); 
    int maxKey = Collections.max(map.keySet()); 
    int maxValue Collections.max(map.values()); 
0

ट्री-मैप के मामले में, यदि आप जानते हैं कुंजी/मान बेतरतीब ढंग से डाला जाता है, पेड़ कम या ज्यादा संतुलित होगा। पेड़ असंतुलित हो जाते हैं, यदि डेटा पहले से क्रमबद्ध क्रम में डाला गया है, तो किसी दिए गए तत्व को तुरंत ढूंढने (या डालने या हटाने) की क्षमता खो जाती है। असंतुलित पेड़ के मामले में, इसमें एन, ओ (एन) अन्य ओ (1) के लिए आनुपातिक समय लगेगा।

0

Apache Commons Math का उपयोग करने पर विचार करें। यहां API docs है।
ब्याज की कक्षा SummaryStatistics है। यह double एस के साथ काम करता है और फ्लाई पर अधिकतम, न्यूनतम, माध्य इत्यादि की गणना करता है (जैसा कि आप इसमें मूल्य जोड़ते हैं)। डेटा मान स्मृति में संग्रहीत नहीं होते हैं, इसलिए इस वर्ग का उपयोग बहुत बड़ी डेटा स्ट्रीम के आंकड़ों की गणना करने के लिए किया जा सकता है।

0

यहाँ एक सरल तरीका है जिसके करता है कि तुम क्या कह रहे हैं यह है:

public String getMapKeyWithHighestValue(HashMap<String, Integer> map) { 
    String keyWithHighestVal = ""; 

    // getting the maximum value in the Hashmap 
    int maxValueInMap = (Collections.max(map.values())); 

    //iterate through the map to get the key that corresponds to the maximum value in the Hashmap 
    for (Map.Entry<String, Integer> entry : map.entrySet()) { // Iterate through hashmap 
     if (entry.getValue() == maxValueInMap) { 

      keyWithHighestVal = entry.getKey();  // this is the key which has the max value 
     } 

    } 
    return keyWithHighestVal; 
} 
संबंधित मुद्दे