Collections कक्षा में एक विधि है।मानचित्र द्वारा समर्थित एक सेट कैसे बनाएं?
Set<E> Collections.newSetFromMap(<backing map>)
क्या यह समर्थन नक्शा और मानचित्र द्वारा समर्थित सेट द्वारा मतलब है?
Collections कक्षा में एक विधि है।मानचित्र द्वारा समर्थित एक सेट कैसे बनाएं?
Set<E> Collections.newSetFromMap(<backing map>)
क्या यह समर्थन नक्शा और मानचित्र द्वारा समर्थित सेट द्वारा मतलब है?
शायद यह कार्यान्वयन को देखने के लिए रोशन किया जाएगा:
private static class SetFromMap<E> extends AbstractSet<E>
implements Set<E>, Serializable
{
private final Map<E, Boolean> m; // The backing map
private transient Set<E> s; // Its keySet
SetFromMap(Map<E, Boolean> map) {
if (!map.isEmpty())
throw new IllegalArgumentException("Map is non-empty");
m = map;
s = map.keySet();
}
public void clear() { m.clear(); }
public int size() { return m.size(); }
public boolean isEmpty() { return m.isEmpty(); }
public boolean contains(Object o) { return m.containsKey(o); }
public boolean remove(Object o) { return m.remove(o) != null; }
public boolean add(E e) { return m.put(e, Boolean.TRUE) == null; }
public Iterator<E> iterator() { return s.iterator(); }
public Object[] toArray() { return s.toArray(); }
public <T> T[] toArray(T[] a) { return s.toArray(a); }
public String toString() { return s.toString(); }
public int hashCode() { return s.hashCode(); }
public boolean equals(Object o) { return o == this || s.equals(o); }
public boolean containsAll(Collection<?> c) {return s.containsAll(c);}
public boolean removeAll(Collection<?> c) {return s.removeAll(c);}
public boolean retainAll(Collection<?> c) {return s.retainAll(c);}
// addAll is the only inherited implementation
private static final long serialVersionUID = 2454657854757543876L;
private void readObject(java.io.ObjectInputStream stream)
throws IOException, ClassNotFoundException
{
stream.defaultReadObject();
s = m.keySet();
}
}
संपादित करें - जोड़ा स्पष्टीकरण:
नक्शा है कि आप प्रदान करते हैं इस वस्तु में m
क्षेत्र के रूप में प्रयोग किया जाता है।
जब आप सेट में e
तत्व जोड़ते हैं, तो यह मानचित्र में e -> true
प्रविष्टि जोड़ता है।
public boolean add(E e) { return m.put(e, Boolean.TRUE) == null; }
तो इस वर्ग के अपने Map
एक वस्तु है कि बस मूल्यों है कि चीजें करने के लिए मैप की जाती हैं अनदेखी, और सिर्फ कुंजियों का उपयोग करके एक Set
तरह बर्ताव करता है में बदल जाता है।
सेट आंतरिक रूप से मूल्यों को संग्रहीत करने के लिए मानचित्र का उपयोग करता है। यहां बैकिंग मैप सेट मैप को संदर्भित करता है जिसे आंतरिक रूप से सेट द्वारा उपयोग किया जाता है। अधिक जानकारी के लिए । http://www.jusfortechies.com/java/core-java/inside-set.php
, Collections.newSetFromMapSet<E>
तत्वों स्टोर करने के लिए प्रदान की Map<E>
कार्यान्वयन उपयोग करता है।
मैं बस के लिए एक उदाहरण कोड बनाया आप
HashMap<String, Boolean> map = new HashMap<String, Boolean>();
Set<String> set = Collections.newSetFromMap(map);
System.out.println(set);
for (int i = 0; i < 10; i++)
map.put("" + i, i % 2 == 0);
System.out.println(map);
System.out.println(set);
और आउटपुट
[]
{3=false, 2=true, 1=false, 0=true, 7=false, 6=true, 5=false, 4=true, 9=false, 8=true}
[3, 2, 1, 0, 7, 6, 5, 4, 9, 8]
जावाडोक से: इस विधि को मानचित्र क्रियान्वयन पर उपयोग करने की आवश्यकता नहीं है जिसमें पहले से ही एक सेट सेट कार्यान्वयन (जैसे हैश मैप या ट्रीमैप) है। – Jasper
कृपया, कुछ स्पष्टीकरण –
मेरा मुख्य सवाल सेट का समर्थन कर रहा है जोड़ सकते हैं और नक्शा .. आप उन्हें से क्या मतलब है और एक साधारण उदाहरण उपयोगी होगा .. – Heggi
धन्यवाद @ क्रिस्टोफर मार्टिन ... – Heggi