2015-11-01 20 views
6

मैं कुछ पोस्ट पढ़ रहा हूं और सोच रहा था कि कोई व्यक्ति एक स्थिति पेश कर सकता है जब कोई ट्रीमैप हैश मैप का उपयोग करने के लिए बेहतर होगा।एक TrieMap का उपयोग करने के लिए उपयुक्त कब है?

तो अनिवार्य रूप से क्या वास्तुकला निर्णय एक TrieMap के उपयोग के लिए प्रेरित करना चाहिए?

+0

आपका मतलब scala.collection.concurrent.TrieMap है? –

उत्तर

5

दस्तावेज़ीकरण के अनुसार। यह परिवर्तनशील संग्रह है कि हो सकता है सुरक्षित रूप से अनुप्रयोगों multithreading में प्रयोग किया जाता है।

एक समवर्ती हैश trie या TrieMap एक हैश सरणी के एक concurrent thread-safe lock-free कार्यान्वयन मैप किया trie है। इसका उपयोग समवर्ती मानचित्र अमूर्तता को लागू करने के लिए किया जाता है। इसमें particularly scalable concurrent डालें और संचालन हटाएं और memory-efficient है। यह ओ (1), परमाणु, लॉक-फ्री स्नैपशॉट का समर्थन करता है जिसका उपयोग रैखिक करने योग्य लॉक-फ्री आकार, इटरेटर और स्पष्ट संचालन को लागू करने के लिए किया जाता है। (आलसी) स्नैपशॉट का मूल्यांकन करने की लागत बाद के अपडेट में वितरित की गई है, इस प्रकार स्नैपशॉट मूल्यांकन क्षैतिज स्केलेबल बना रहा है।

जानकारी के लिए, देखें: http://lampwww.epfl.ch/~prokopec/ctries-snapshot.pdf

यह भी caching के लिए वास्तव में अच्छा एपीआई है। तो उदाहरण के लिए आपको अलग-अलग संख्या के फैक्टोरियल की गणना करना होगा और कभी-कभी इन परिणामों का पुन: उपयोग करना होगा।

object o { 

    val factorialsCache = new TrieMap[Int, Int]() 

    def factorial(num: Int) = ??? // really heavy operations 
    def doWorkWithFuctorial(num: Int) = { 
     val factRes = factorialsCache.getOrElseUpdate(num, { 
     // we do not want to invoke it very often 
     factorial(num) 
      // this function will be executed only if there are no records in Map for such key 
     }) 
     // start do some work `withfactRes` 
     factRes 
    } 
    } 

वेतन ध्यान - ऊपर लिखने के संचालन के लिए उपयोग वैश्विक राज्य (कैश) समारोह है, लेकिन यह समवर्ती धागे में इसका इस्तेमाल करने के लिए पूरी तरह सुरक्षित है। आप कोई डेटा खोले नहींंगे।

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