जवाबों:
अब जावा 8 के साथ आप तीसरे पक्ष के ढांचे की आवश्यकता के बिना ऐसा कर सकते हैं:
Set<String> set = Stream.of("a","b","c").collect(Collectors.toSet());
देख संग्राहक ।
का आनंद लें!
अमरूद का उपयोग करना , यह उतना ही सरल है:
Set<String> mySet = ImmutableSet.<String> of("a", "b");
या एक परस्पर सेट के लिए:
Set<String> mySet = Sets.newHashSet("a", "b")
अधिक डेटा प्रकारों के लिए अमरूद उपयोगकर्ता गाइड देखें
Sets.newHashSet("a", "b")याSets.newLinkedHashSet("a", "b")
Sets.newLinkedHashSet()उस हस्ताक्षर के साथ मौजूद नहीं है, क्षमा करें
Set<String> mySet = ImmutableSet.of("a", "b");
आप उपयोग कर सकते हैं
new HashSet<String>(Arrays.asList("a","b"));
शून्य या एक सदस्यों वाले सेट के विशेष मामलों के लिए, आप इसका उपयोग कर सकते हैं:
java.util.Collections.EMPTY_SET
तथा:
java.util.Collections.singleton("A")
java.util.Collections.emptySet()मेरे मन में, प्रकार सुरक्षा के कारण EMPTY_SET से अधिक पसंद किया जाता है। कलेक्शंस क्लास में टिप्पणियों से:Unlike the like-named field, this method is parameterized.
जैसा कि दूसरों ने कहा है, उपयोग करें:
new HashSet<String>(Arrays.asList("a","b"));
जावा में यह मौजूद नहीं होने का कारण यह है कि Arrays.asListएक निश्चित आकार की सूची, दूसरे शब्दों में:
public static void main(String a[])
{
List<String> myList = Arrays.asList("a", "b");
myList.add("c");
}
यह दिखाता है:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.add(Unknown Source)
at java.util.AbstractList.add(Unknown Source)
वर्ग के Setअंदर एक "निश्चित आकार" का जेडीके कार्यान्वयन नहीं है Arrays। आप ऐसा क्यों चाहते हैं? एक Setगारंटी है कि कोई डुप्लिकेट नहीं है, लेकिन यदि आप उन्हें हाथ से टाइप कर रहे हैं, तो आपको उस कार्यक्षमता की आवश्यकता नहीं होनी चाहिए ... और Listअधिक विधियाँ हैं। दोनों इंटरफेस Collectionऔर विस्तार करते हैं Iterable।
जैसा कि दूसरों ने कहा है, अमरूद का उपयोग करें यदि आप वास्तव में यह कार्यक्षमता चाहते हैं - क्योंकि यह जेडीके में नहीं है। उस पर जानकारी के लिए उनके जवाब (विशेष रूप से माइकल शमीयर के उत्तर) देखें।
जावा 9 में, फैक्ट्री विधियों के माध्यम से समान फ़ंक्शन जोड़ा गया है:
Set<String> oneLinerSet = Set.of("a", "b", ...);
( Listसाथ ही इसके लिए समतुल्य हैं ।)
नहीं, लेकिन आप इसे इस तरह से कर सकते हैं
new HashSet<String>(Arrays.asList("a", "b", ...));
यहाँ एक छोटी विधि है जिसका आप उपयोग कर सकते हैं
/**
* Utility method analogous to {@link java.util.Arrays#asList(Object[])}
*
* @param ts
* @param <T>
* @return the set of all the parameters given.
*/
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> Set<T> asSet(T... ts) {
return new HashSet<>(Arrays.asList(ts));
}
जावा 8 और एनम का उपयोग करने का एक और तरीका यह होगा:
Set<String> set = EnumSet.of(StandardOpenOption.CREATE, StandardOpenOption.READ);
EnumSet देखें ।
मैं इस दृष्टिकोण और के बीच एक प्रदर्शन विश्लेषण की सिफारिश करूंगा
Set<String> set = Stream.of(StandardOpenOption.CREATE, StandardOpenOption.READ).collect(Collectors.toSet());
क्योंकि यदि आपके पास पांच से अधिक तत्व हैं, तो विधि का javadoc बताता है कि प्रदर्शन समस्याएं हो सकती हैं जैसा कि आप Set.Of (E, E ...) के javadoc में देख सकते हैं ।