2011-09-05 13 views
6

जावा एक Set इंटरफ़ेस जहां contains() निम्नलिखित के रूप में परिभाषित किया गया है परिभाषित करता है:जावा में इंस्टेंस सेट?

रिटर्न true अगर इस सेट निर्दिष्ट तत्व शामिल है। औपचारिक रूप से औपचारिक रूप से, सत्य लौटाता है अगर केवल इस सेट में तत्व e जैसे (o==null ? e==null : o.equals(e)) शामिल है।

Collection इंटरफ़ेस निम्नलिखित के रूप में contains() परिभाषित करता है:

रिटर्न true अगर इस संग्रह निर्दिष्ट तत्व शामिल है। औपचारिक रूप से औपचारिक रूप से, सही होता है अगर केवल इस संग्रह में कम से कम एक तत्व e जैसे (o==null ? e==null : o.equals(e)) है।

मैं एक जावा 'उदाहरण के सेट' जहां == और नहीं equals() पर आधारित है की जरूरत है। दूसरे शब्दों में, कठिन उदाहरणों का एक सेट जहां दो अलग-अलग ऑब्जेक्ट्स ए और बी जहां A.equals(B)A!=B के बाद से उसी सेट में सह-अस्तित्व में हो सकता है।

क्या जावा में या कुछ सार्वजनिक पुस्तकालय में वितरित ऐसा 'इंस्टेंस सेट' है? मुझे कुछ भी नहीं मिला, लेकिन हो सकता है कि कोई एसओ पर बेहतर जानता हो। यदि नहीं, तो मैं इसे लागू करूंगा। धन्यवाद।

उत्तर

13

जेआरई में कोई प्रत्यक्ष "इंस्टेंस सेट" नहीं है।

लेकिन एक IdentityHashMap है, जो एक "उदाहरण के नक्शे" अपने शब्दावली के अनुसार लागू करता है।

और एक विधि Collections.newSetFromMap() कहा जाता है जो एक मनमाना Map कार्यान्वयन से एक Set बना सकते हैं नहीं है।

तो आप आसानी से अपने खुद के उदाहरण इस तरह सेट का निर्माण कर सकते हैं:

Set<MyType> instanceSet = Collections.newSetFromMap(new IdentityHashMap<MyType,Boolean>()); 
+0

+1: मुझसे ज्यादा तेज। ;) –

+0

ऐसा लगता है कि यह मेरे आधार सेट के लिए आवश्यक आधार है। महान। धन्यवाद। – JVerstry

+1

ओपी को यह ध्यान में रखना चाहिए कि इस तरह से लागू 'सेट' 'सेट' अनुबंध का उल्लंघन है ... 'पहचान हैशैप' के रूप में 'मानचित्र' अनुबंध का उल्लंघन करता है। वैसे भी, यह संभावित कारण है कि ऐसी कक्षा संग्रह ढांचे का एक मानक हिस्सा नहीं है। –

1

आप बस ऐसे ही equals विधि को लागू कर सकते हैं:

public boolean equals(Obect o) { 
    return this == o; 
} 
+0

सच है, मैं कर सकता था, लेकिन मैं अलग-अलग बराबर() को लागू करने का अवसर रखना चाहता हूं। – JVerstry

+1

ठीक है :-) बस एक त्वरित सिर ऊपर, मैं कहूंगा कि लगभग * सभी * संग्रह 'बराबर' कॉल करने का प्रयास करने से पहले संदर्भ समानता की जांच करते हैं। – dacwe

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