2016-06-27 5 views
7

मेरे पास जावा में लगभग 100,000 कर्मचारियों की एक सूची है। अब मैं सूची से एक विशेष कर्मचारी वस्तु को जल्दी से हटाना चाहता हूं। पूरी सूची को फिर से शुरू किए बिना इसे करने के संभावित तरीके क्या हैं? (यदि मैं प्रत्येक ऑब्जेक्ट को पुन: सक्रिय करता हूं, तो विवरणों की तुलना करें, फिर हटाएं: इस परिदृश्य में बहुत समय लगता है)जावा में विशेष सूची ऑब्जेक्ट को कैसे हटाएं?

+0

UR_object_List.remove (ऑब्जेक्ट) –

उत्तर

7

आपको ऑब्जेक्ट को तुरंत ढूंढने के साधनों की आवश्यकता है। आप

  • एक ArrayList अनुसार क्रमबद्ध किया जा सकता था और उसके बाद से Collections.binarySearch O(log N) नोट एक द्विआधारी खोज करते हैं: वास्तव में एक ArrayList से एक तत्व को हटाने जबकि LinkedList निकालने के लिए O(1) के रूप में, उस पर एक द्विआधारी खोज व्यर्थ यानी होगा O(n) है बहुत धीमी से O(N)
  • आप कर्मचारी के हैश सेट के बजाय हो सकता था और हटाने O(1) परिशोधित किया जाएगा। यदि आप सम्मिलन के आदेश जैसे कुछ आदेश को संरक्षित करना चाहते हैं तो आप LinkedHashSet का उपयोग कर सकते हैं।
  • आप ऑब्जेक्ट को व्यवहार्य बना सकते हैं और enabled जैसे फ़ील्ड को सेट कर सकते हैं जिसे आप वास्तव में हटाने के बजाय false पर सेट करते हैं। आप इसे बाद में एक बैच कार्य के रूप में कुछ समय (रात भर सप्ताह के अंत में या पर) पर निकाल सकते
+1

@TimBiegeleisen SO Quora नहीं है हालांकि https://www.quora.com/Is-it-true-that-after-Brexit-Pluto-will-be-a-planet- इन-द-यूके-दोबारा;) –

2

अब मैं सूची में से एक विशेष कर्मचारी वस्तु को नष्ट करना चाहते ...

तुम सिर्फ कर सकते हैं List.remove का उपयोग इस

व्यवहार में ऐसा करने के लिए ... जल्दी से, यहां तक ​​कि हालांकि आइटम को हटाने के लिए O(1) ऑपरेशन हो सकता है, सूची की पूरी लंबाई पर पुनरावृत्ति O(n) है, और जैसा कि आपने संदेह किया है, उतना तेज़ नहीं है।

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

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