मेरे पास यह सूची है:एकाधिक सेट कैसे छेड़छाड़ करें?
private List<Set<Address>> scanList;
इसलिए मेरी सूची में कई स्कैन हैं जो आप देख सकते हैं। प्रत्येक स्कैन के बाद मैं सूची में नया सेट जोड़ता हूं।
सभी स्कैन समाप्त होने के बाद मैं केवल प्रत्येक पते में होने वाले पते लेना चाहता हूं और इसे इसमें डाल देना चाहता हूं:
private List<Address> addresses;
क्या ऐसा कुछ सेट सेट/ट्रीसेट/हैशसेट में पहले से मौजूद है?
संपादित करें: उत्तर के बाद, retainAll() सही तरीका है। धन्यवाद। यहां स्रोत है:
Set<Address> addressCross = scanList.get(0);
for (int i = 1; i < scanList.size(); i++) {
addressCross.retainAll(scanList.get(i));
}
for (Address address : addressCross) {
addresses.add(address);
}
सावधान रहें! लुइस वासरमैन के मुताबिक, 'सेट्स.ऑनियन()' में 2 से अधिक सेटों के लिए खराब प्रदर्शन है। मेरा मानना है कि यह 'Sets.intersection()' के लिए सच है (क्योंकि दोनों विधियां दृश्य वापस आती हैं)। – Gili
@Gili: यह आम तौर पर सच है, हालांकि यह इस तथ्य से कम हो गया है कि अंतराल सेट को अंत में कॉपी किया गया है, जिसका अर्थ है कि नेस्टेड सेट की लागत केवल वहां होती है। नेस्टेड व्यू सेट का मुद्दा बड़ा होता है यदि आप सेट को किसी अन्य कोड पर पास करते हैं जो उस पर कई 'इन' कॉल कर सकता है। – ColinD
मैं इस चर्चा में थोड़ा देर से आया हूं लेकिन यह समाधान नहीं मानता कि पहले सेट में "कुंजी" तत्व शामिल हैं। उदाहरण के लिए पूर्णांक (11,12) के साथ पहला सेट, दूसरा (1,3,4,5,6), और इसी तरह के विचार पर विचार करें। जब मैं इसे कोड करता हूं तो अंतिम बहु-छेड़छाड़ सेट खाली होता है! – user25029