तो कल्पना कीजिए कि मेरे पास कक्षा के दो उदाहरण हैं:

public class MyClass {
    public void sayHello() {
         System.out.println("Hello");
    }
}

a = new MyClass();
b = new MyClass();

अब मैं उन्हें किसी अन्य वस्तु में जोड़ता हूं, जैसे:

public class OtherClass {
    private ArrayList<MyClass> myClsList = new ArrayList<>();

    public void add(MyClass obj) {
        myClsList.add(obj);
    }

    public void remove(MyClass obj) {
        // ????
    }
}

c = new OtherClass();

c.add(a);
c.add(b);

अब मैं एक विशिष्ट उदाहरण को हटाना चाहता हूं उदा

c.remove(a);
  1. क्या मैं बस उन पर पुनरावृति कर सकता हूं और समानता के लिए परीक्षण कर सकता हूं, मेरा मतलब है कि यह सैद्धांतिक रूप से काम करना चाहिए, क्योंकि दो उदाहरणों में अलग "आंतरिक संकेत" हैं?

  2. मुझे लगता है कि हैश मैप आधारित दृष्टिकोण का उपयोग करना अधिक कुशल होगा, लेकिन मैं वहां एक कुंजी के रूप में क्या उपयोग कर सकता हूं (मान लीजिए कि मैं अद्वितीय इंस्टेंस आईडी या कुछ नहीं जोड़ सकता)।

संपादित करें: कुछ भ्रम है कि मैं वास्तव में क्या जानना चाहता हूं। यहां कुंजी यह है कि मैं जानना चाहता हूं कि सी के ऐरेलिस्ट से उस विशिष्ट उदाहरण को हटाने का कोई तरीका है या जो भी एग्रीगेटर ऑब्जेक्ट मैं उपयोग कर सकता हूं, केवल संबंधित ऑब्जेक्ट संदर्भ प्रदान करके। मुझे लगता है कि यह केवल ArrayList को रखकर और समानता के लिए परीक्षण करके किया जा सकता है (हालांकि मैं 100% निश्चित नहीं हूं) लेकिन यह पूरी सूची के माध्यम से पुनरावृत्ति किए बिना संभव होने पर क्लीनर होगा। मैं सिर्फ यह जानना चाहता हूं कि जावा में ऐसा कुछ संभव है या नहीं। (मुझे पता है कि अतिरिक्त जानकारी का उपयोग करके इसे कैसे हल किया जाए लेकिन सुराग केवल फ़िल्टरिंग/पुनर्प्राप्ति उद्देश्यों के लिए संबंधित ऑब्जेक्ट संदर्भ होना है।

2
meow 20 अगस्त 2017, 03:47

1 उत्तर

आप जावा के अनुसार a.toString() का उपयोग कर सकते हैं डॉक्टर,

क्लास ऑब्जेक्ट के लिए टूस्ट्रिंग विधि एक स्ट्रिंग देता है जिसमें उस वर्ग का नाम होता है जिसमें ऑब्जेक्ट एक उदाहरण होता है, एट-साइन कैरेक्टर `@ ', और ऑब्जेक्ट के हैश कोड का अहस्ताक्षरित हेक्साडेसिमल प्रतिनिधित्व।

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

एनबी: इस अभ्यास से सावधान रहें, वास्तविक वस्तु पतों से संबंधित होने के कारण `ऑब्जेक्ट.toString() द्वारा लौटाए गए मूल्य पर भरोसा न करें, विस्तृत विवरण देखें यहां

2
Gio 20 अगस्त 2017, 12:50