जवाबों:
मैं sepp2k से सहमत हूं, लेकिन कुछ अन्य विवरण हैं जो मायने रख सकते हैं:
new HashSet<Foo>(myList);
आपको एक बिना सेट वाला सेट देगा जिसमें डुप्लिकेट नहीं है। इस स्थिति में, आपके ऑब्जेक्ट्स पर असमान () पद्धति का उपयोग करके डुप्लिकेट की पहचान की जाती है। यह .hashCode () विधि के संयोजन में किया जाता है। (समानता पर अधिक जानकारी के लिए यहां देखें )
एक विकल्प जो क्रमबद्ध सेट देता है:
new TreeSet<Foo>(myList);
यह काम करता है अगर फू तुलनात्मक लागू करता है। यदि यह नहीं है तो आप एक तुलनित्र का उपयोग करना चाह सकते हैं:
Set<Foo> lSet = new TreeSet<Foo>(someComparator);
lSet.addAll(myList);
यह तुलनीयता सुनिश्चित करने के लिए या तो तुलना () (तुलनीय अंतरफलक से) या तुलना () (तुलनाकर्ता से) पर निर्भर करता है। इसलिए, यदि आप सिर्फ विशिष्टता की परवाह करते हैं, तो हैशसेट का उपयोग करें। यदि आप छँटाई के बाद हैं, तो ट्रीसेट पर विचार करें। (याद रखें: बाद में ऑप्टिमाइज़ करें!) अगर स्पेस दक्षता मायने रखती है तो समय दक्षता के मामले में हैशसेट का उपयोग करें, ट्रीसेट को देखें। ध्यान दें कि सेट और मानचित्र के अधिक कुशल कार्यान्वयन ट्रोव (और अन्य स्थानों) के माध्यम से उपलब्ध हैं।
यदि आप अमरूद पुस्तकालय का उपयोग करते हैं :
Set<Foo> set = Sets.newHashSet(list);
या और अच्छा:
Set<Foo> set = ImmutableSet.copyOf(list);
ImmutableSet.of()
उदाहरण के रूप में, एक कारक के रूप में उल्लेख नहीं किया गया है । संपादित करें: यह कारक नहीं हो सकता है क्योंकि सभी ओवरलोड्स अनावश्यक हैं।
जावा 8 का उपयोग करके आप स्ट्रीम का उपयोग कर सकते हैं:
List<Integer> mylist = Arrays.asList(100, 101, 102);
Set<Integer> myset = mylist.stream().collect(Collectors.toSet()));
Set<E> alphaSet = new HashSet<E>(<your List>);
या पूरा उदाहरण
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class ListToSet
{
public static void main(String[] args)
{
List<String> alphaList = new ArrayList<String>();
alphaList.add("A");
alphaList.add("B");
alphaList.add("C");
alphaList.add("A");
alphaList.add("B");
System.out.println("List values .....");
for (String alpha : alphaList)
{
System.out.println(alpha);
}
Set<String> alphaSet = new HashSet<String>(alphaList);
System.out.println("\nSet values .....");
for (String alpha : alphaSet)
{
System.out.println(alpha);
}
}
}
मैं सेट करने के लिए परिवर्तित करने से पहले एक अशक्त जाँच करूँगा।
if(myList != null){
Set<Foo> foo = new HashSet<Foo>(myList);
}
Set<Foo> foo = myList == null ? Collections.emptySet() : new HashSet<Foo>(myList);
आप परिवर्तित कर सकते हैं List<>
करने के लिएSet<>
Set<T> set=new HashSet<T>();
//Added dependency -> If list is null then it will throw NullPointerExcetion.
Set<T> set;
if(list != null){
set = new HashSet<T>(list);
}
Java 8 के लिए यह बहुत आसान है:
List < UserEntity > vList= new ArrayList<>();
vList= service(...);
Set<UserEntity> vSet= vList.stream().collect(Collectors.toSet());
new ArrayList<>()
;-)
जावा - addAll
set.addAll(aList);
जावा - नई वस्तु
new HashSet(list)
जावा-8
list.stream().collect(Collectors.toSet());
गुवा का उपयोग करना
Sets.newHashSet(list)
अपाचे कॉमन्स
CollectionUtils.addAll(targetSet, sourceList);
जावा 10
var set = Set.copyOf(list);
कंस्ट्रक्टर का उपयोग करने का सबसे अच्छा तरीका
Set s= new HashSet(list);
जावा 8 में आप स्ट्रीम एपी ::
Set s= list.stream().collect(Collectors.toSet());
एक पाने के लिए विभिन्न तरीके हैं Set
:
List<Integer> sourceList = new ArrayList();
sourceList.add(1);
sourceList.add(2);
sourceList.add(3);
sourceList.add(4);
// Using Core Java
Set<Integer> set1 = new HashSet<>(sourceList); //needs null-check if sourceList can be null.
// Java 8
Set<Integer> set2 = sourceList.stream().collect(Collectors.toSet());
Set<Integer> set3 = sourceList.stream().collect(Collectors.toCollection(HashSet::new));
//Guava
Set<Integer> set4 = Sets.newHashSet(sourceList);
// Apache commons
Set<Integer> set5 = new HashSet<>(4);
CollectionUtils.addAll(set5, sourceList);
जब हम का उपयोग Collectors.toSet()
यह एक सेट देता है और डॉक के अनुसार: There are no guarantees on the type, mutability, serializability, or thread-safety of the Set returned
। अगर हम प्राप्त करना चाहते हैं HashSet
तो हम एक सेट (चेक set3
) प्राप्त करने के लिए अन्य विकल्प का उपयोग कर सकते हैं ।
जावा 10 के साथ, अब आप Set#copyOf
आसानी List<E>
से एक अयोग्य को परिवर्तित करने के लिए उपयोग कर सकते हैं Set<E>
:
उदाहरण:
var set = Set.copyOf(list);
ध्यान रखें कि यह एक अनियंत्रित ऑपरेशन है, और null
तत्वों की अनुमति नहीं है , क्योंकि यह एक फेंक देगा NullPointerException
।
यदि आप इसे संशोधित करने की इच्छा रखते हैं, तो बस इसे कंस्ट्रक्टर के Set
कार्यान्वयन में पास करें।
के साथ एक अधिक जावा 8 लचीला समाधान Optional.ofNullable
Set<Foo> mySet = Optional.ofNullable(myList).map(HashSet::new).orElse(null);
यदि आप ग्रहण संग्रह का उपयोग करते हैं :
MutableSet<Integer> mSet = Lists.mutable.with(1, 2, 3).toSet();
MutableIntSet mIntSet = IntLists.mutable.with(1, 2, 3).toSet();
MutableSet
इंटरफ़ेस फैली java.util.Set
जबकि MutableIntSet
इंटरफेस नहीं करता है। आप कारखाने वर्ग का उपयोग करके किसी Iterable
को भी परिवर्तित कर सकते हैं ।Set
Sets
Set<Integer> set = Sets.mutable.withAll(List.of(1, 2, 3));
यहाँ ग्रहण संग्रहों में उपलब्ध उत्परिवर्तित कारखानों की अधिक व्याख्या है ।
यदि आप एक ImmutableSet
से चाहते हैं List
, तो आप Sets
कारखाने का उपयोग इस प्रकार कर सकते हैं :
ImmutableSet<Integer> immutableSet = Sets.immutable.withAll(List.of(1, 2, 3))
नोट: मैं एक्लिप्स कलेक्शंस के लिए कमिट हूं
याद रखें कि, सूची से सेट में परिवर्तित करना डुप्लिकेट को संग्रह से हटा देगा क्योंकि सूची डुप्लिकेट का समर्थन करती है लेकिन सेट जावा में डुप्लिकेट का समर्थन नहीं करता है।
प्रत्यक्ष रूपांतरण: किसी सूची को सेट में परिवर्तित करने का सबसे सामान्य और सरल तरीका
// Creating a list of strings
List<String> list = Arrays.asList("One", "Two", "Three", "Four");
// Converting a list to set
Set<String> set = new HashSet<>(list);
Apache Commons Collections: सूची को सेट में बदलने के लिए आप कॉमन्स कलेक्शंस एपीआई का उपयोग भी कर सकते हैं: -
// Creating a list of strings
List<String> list = Arrays.asList("One", "Two", "Three", "Four");
// Creating a set with the same number of members in the list
Set<String> set = new HashSet<>(4);
// Adds all of the elements in the list to the target set
CollectionUtils.addAll(set, list);
स्ट्रीम का उपयोग करना: किसी अन्य तरीके से दी गई सूची को स्ट्रीम में बदलना है, फिर स्ट्रीम पर सेट करना है: -
// Creating a list of strings
List<String> list = Arrays.asList("One", "Two", "Three", "Four");
// Converting to set using stream
Set<String> set = list.stream().collect(Collectors.toSet());
Set
औरMap
एक का उपयोग किया जाता है;HashSet
है ग्रहण यहाँ।