2011-08-16 13 views
45

से गणना मेरे पास एक साधारण संग्रह प्रश्न है। मेरे पास Set<String> ऑब्जेक्ट है। मैं उस सेट में तारों की गणना चाहता हूं। इसके बारे में जाने का सबसे साफ/सबसे अच्छा तरीका क्या है?जावा: सेट <String>

+1

java.util.Enumeration के रूप में गणना? Java.util का उपयोग न करने का कोई कारण नहीं है। इसके बजाय अक्षम? –

+2

हाँ..क्योंकि मैं एक ऐसी विधि को ओवरराइड कर रहा हूं जो विशेष रूप से गणना लौटाती है। – Charlotte

+1

मुझे लगता है कि आपको इसके बजाय सबसे अधिक वोट दिया जाना चाहिए। –

उत्तर

26

संपादित करें: अपनी खुद की लिखने की कोई आवश्यकता नहीं है (हालांकि मैं वंशावली के लिए नीचे कार्यान्वयन छोड़ दूंगा) - जेडीके में केविन बोरिलियन के जवाब को देखें।


तुम सच में एक गणन जरूरत हैं, इस्तेमाल कर सकते हैं कर सकते हैं:

Enumeration<String> x = new Vector(set).elements(); 

यह Iterable<E> उपयोग करने के लिए करता है, तो बिल्कुल भी संभव बेहतर होगा हालांकि ...

एक बेहतर विकल्प है Iterator<E> के आसपास एक छोटी रैपर कक्षा लिखने के लिए। इस तरह आप की जरूरत नहीं है एक प्रति लेने के लिए सिर्फ Enumeration<E> के imlementation लगता है:

import java.util.*; 

class IteratorEnumeration<E> implements Enumeration<E> 
{ 
    private final Iterator<E> iterator; 

    public IteratorEnumeration(Iterator<E> iterator) 
    { 
     this.iterator = iterator; 
    } 

    public E nextElement() { 
     return iterator.next(); 
    } 

    public boolean hasMoreElements() { 
     return iterator.hasNext(); 
    } 

} 


public class Test { 
    public static void main(String[] args) { 
     Set<String> set = new HashSet<String>(); 
     Enumeration<String> x = new IteratorEnumeration<String>(set.iterator()); 
    } 
} 
+0

@Downvoter: टिप्पणी करने की देखभाल? –

+0

मैंने अभी भी मतदान किया है। जेडीके के पास स्थिर उपयोग विधि होने पर आपके स्वयं के कार्यान्वयन को लिखने की आवश्यकता नहीं है जो कि केविन बोर्रिलियन द्वारा बताए गए अनुसार आपके लिए करता है। – Snekse

+1

@ स्नेक्से: यदि पिछले डाउनवॉटर ने इतना कहा था, तो यह सहायक होता। मैं अब अपना जवाब हटा नहीं सकता क्योंकि यह स्वीकार किया गया है, लेकिन मैं केविन को इंगित कर सकता हूं ... –

5

मान लें कि आप एक के लिए लूप, किसी भी के लिए लागू के माध्यम से स्पष्ट तरीका यह करने के लिए है गणितीय अर्थ में शुमार मतलब वर्ग कि Iterable लागू करता है:

Set<String> strs = ... 

for (String s : strs) { 
... 
} 

तुम सच में एक Enumeration की आवश्यकता होती है आप iterator() फोन करके Iterator लौटे रैप करने के लिए एक एडाप्टर वर्ग को लागू कर सकते हैं। अपाचे संग्रह लाइब्रेरी में एक एडाप्टर क्लास है: IteratorEnumeration

या आप गूगल के अमरूद पुस्तकालय इस्तेमाल कर सकते हैं:

Set<String> mySet = ... 
Enumeration<String> = Iterators.asEnumeration(mySet.iterator()); 
+1

डाउनवॉटर ...टिप्पणी करने की देखभाल? – Adamski

170

java.util.Collections.enumeration(set)

जावाडोक

निर्दिष्ट संग्रह पर एक गणना देता है। यह विरासत एपीआई के साथ इंटरऑपरेबिलिटी प्रदान करता है जिसके लिए इनपुट के रूप में गणना की आवश्यकता होती है।

+8

ठीक है, मुझे एहसास है कि मेरा जवाब terse है, लेकिन ऐसा इसलिए है क्योंकि यह सब कुछ वास्तव में कहा जाना चाहिए। :) यह विधि जेडीके में है और * * * पोस्टर क्या पूछ रहा है * करता है। यह मेरे लिए अजीब बात है कि इसे अंतिम स्थान पर रखा जाएगा। –

+1

प्रभावी जावा आइटम 47: पुस्तकालयों को जानें और उपयोग करें – Ray

संबंधित मुद्दे